2011-08-24 174 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

好吧,現在試一試 –