2011-08-24 177 views
1

我无法从我的plist文件中读取数据。提取字符串中的值的正确方法是什么?并且让我说我有2个项目,我怎么得到两个?下面将是plist上的图像。 EventAddress.plist无法从plist中读取数据

下面是plist的源代码。我读的地方,有可能是一个差异在Xcode 3和Xcode的4

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>Array</key> 
    <array> 
     <string>value 1</string> 
     <string>value 2</string> 
    </array> 
</dict> 
</plist> 

回答

1

仍旧回答这个问题。但是我设法找到了一个能够为我工作的代码。代码如下。感谢peylow的努力。

NSString *path = [[NSBundle mainBundle] pathForResource:@"EventAddress" ofType:@"plist"]; 
    NSMutableDictionary *myDictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:path]; 

    NSArray* allmyKeys = [myDictionary allValues]; 
    NSLog(@"%@", allmyKeys); 
    NSLog(@"%@", [[allmyKeys objectAtIndex:0] objectAtIndex:0]); 

最后2的NSLog来看看我的plist中返回值的数组,并找出其中只有1的值。并且非常感谢调试器,在看了近3天后,我也意识到了我的问题。这个该死的阵列并不是正常的一维,它的二维。这就是为什么我使用了两次objectAtIndex。

+0

非常感谢发布此!我在这件事上突然想到了。我确信这与在xcode 4.0中创建的plist文件有关。 – ArdenDev

+0

但是我听说某个地方这种方法可能有效,但它不是这样做的理想方式。不要停止寻找正确的答案或方法来做到这一点。但我很高兴这种方法帮助你:) –

3

首先,你需要让你的应用程序包的plist文件资源的路径:

NSString* plistPath = [[NSBundle mainBundle] pathForResource:@"filename" 
                 ofType:@"plist"]; 

鉴于此路径您可以将plist文件加载到内存中。这是非常简单,因为plist文件的根节点是数组:

NSArray* plist = [NSArray arrayWithContentsOfFile:plistPath]; 

更经常在你的plist根节点是一个字典,字典具有用于装载的Plist等效简便方法。如果根节点是未知的,那么你应该起诉NSPropertyListSerialization类,多一点工作,但更灵活。

在plist中的存储器中的内容将永远是属性值类的实例,就像使用他们与他们的任何实例:

  • NSData
  • NSString
  • NSArray
  • NSDictionary
  • NSDate
  • NSNumber
+0

好的,谢谢你的回复。所以如果我想要值“值1”,我需要做'NSString * v1 = [plist objectAtIndex:0];'?? –

+0

@Melvin Lai - 是的。 – PeyloW

+0

好吧,现在试一试 –