2014-02-24 74 views
-3

我已經花了整個昨天試圖解決這個問題,沒有運氣。這是我正在使用的代碼。將plist文件中的數據存儲到數組中

NSString *path = [[NSBundle mainBundle] pathForResource:@"file" ofType:@"plist"]; 

NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:path]; 

NSArray *array = [NSArray arrayWithArray:[dict objectForKey:@"root"]]; 

for(int num = 0; num < 5; num++) 
{ 
NSLog(@"my array:%@", array); 
} 

NSLog(@"items in my array: %lu", (unsigned long) [array count]); 

下面是與im合作的plist文件的意見。

<plist version="1.0"> 
<dict> 
<key>New item</key> 
<string>hello</string> 
<key>New item - 2</key> 
<string>world</string> 
<key>New item - 3</key> 
<string>again</string> 
<key>New item - 4</key> 
<string>and</string> 
<key>New item - 5</key> 
<string>again</string> 
</dict> 
</plist> 

此代碼不會返回null就像當我使用一個NSArray在NSDictionary的嘗試,但是當我運行控制檯不會打印出從plist中檢索到的任何數據。它只是打印出來:

my array:{} 
my array:{} 
my array:{} 
my array:{} 
my array:{} 
items in my array: 0 

如果我嘗試通過更改NSLog NSLog(@「我的數組:%@」,數組)打印字典;我明白了。

my array:(NULL) 
my array:(NULL) 
my array:(NULL) 
my array:(NULL) 
my array:(NULL) 
items in my array: 0 
+1

您給出的plist文件的描述沒有一個名爲「root」的密鑰,也不包含任何數組。 –

+0

你可以顯示打印'dict'的輸出嗎? –

+0

我添加了一個NSLog打印列表計數,看看我的數組中有多少值添加到它的字典項目和出和輸出爲0.所以我相信我的問題是,我沒有任何對象我的陣列。我的plist是一本字典,裏面實際上有5個條目,但是對於這個問題,我只是輸入了一個條目。我將在原始問題和新輸出中編輯新代碼。 –

回答

0

我發現了這個問題。我必須創建一個構建階段並將plist文件添加到它。這樣當我使用pathToResource ofFile時,它有一個文件來查找我何時使用代碼的其餘部分。

0

你試圖把所有的值形式的字典放入數組? 如果是這樣,請添加:

NSArray *array = [NSArray arrayWithArray:[dict allValues]]; 

//檢查文件;

NSString *path = [[NSBundle mainBundle] pathForResource:@"file" ofType:@"plist"]; 

if (![[NSFileManager defaultManager] fileExistsAtPath:path]) 
    NSLog(@"NO FILE AT PATH: %@", path); 
+0

我添加了這個,並且還添加了一個NSLog,打印出[字典計數]來查看有多少plist對象實際存儲到我的字典中,並且它打印0,然後我做了我的數組的count方法,它也有0個對象在裏面。有什麼想法嗎? –

+0

字典中沒有任何內容,因此數組中不會有任何內容。 – CW0007007

+0

我的代碼有問題嗎?我認爲我的代碼會將我的plist內容存儲在我的字典中。 –

0

一切你可以打印這樣的plist是 的NSLog(字典[@ 「新項目」]);

而且你應該使用

for(int num = 0; num < array.count; num++) 
{ 
    NSLog(@"my array:%@", array[i]); 
} 

代替

for(int num = 0; num < 5; num++) 
{ 
    NSLog(@"my array:%@", array); 
} 
0

不知道是什麼鍵是在字典?在這種情況下無需擔心密鑰。試試這個

NSString *path = [[NSBundle mainBundle] pathForResource:@"file" ofType:@"plist"]; 
NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:path]; 
if(dict.count != 0) 
    { 
    NSArray *array = [dict allKeys]; 
    for(int num = 0; num < array.count; num++) 
     { 
     NSLog(@"my array item:%@", [dict objectForKey:array[num]]); 
     } 
    } 
else 
    { 
    NSLog(@"Your dictionary is empty."); 
    }