2009-07-13 111 views
0

我想從plist得到一個數組,如在這裏的答案建議,但它不工作。有人能告訴我我錯過了什麼嗎?來自iPhone plist的陣列

這是plist的樣子....另一個奇怪的是,我無法得到這個打開純文本文件?當我做它看起來像垃圾.....但它在屬性列表編輯器看起來不錯:

<?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>count</key> 
<array> 
    <integer>5</integer> 
</array> 
<key>username</key> 
<array> 
    <string>johnsmith</string> 
</array> 
</dict> 
</plist> 

這裏是我使用的代碼.....字典是一個的NSMutableDictionary和accountsArray是NS文件中的NSMustableArray。

 NSMutableDictionary *tempDictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:accountsFilePath]; 

dictionary = tempDictionary; 
[tempDictionary release]; 


NSMutableArray *nameArray = [[NSMutableArray alloc] init]; 
nameArray = [dictionary objectForKey:@"username"]; 

accountsArray = nameArray; 

[nameArray release]; 

我錯過了什麼嗎?搞砸了嗎?

謝謝...

回答

0

我終於得到它的工作是這樣的:

dictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:accountsFilePath];  


if (accountsArray == nil){ 

    accountsArray = [[NSMutableArray alloc]init]; 
} 

if (countArray == nil){ 

    countArray = [[NSMutableArray alloc]init]; 
} 



countArray = [dictionary objectForKey:@"count"]; 
accountsArray = [dictionary objectForKey:@"username"]; 
+0

實際上,我用這樣的: \t如果(accountsArray ==無){ \t \t \t \t accountsArray = [[[NSMutableArray裏的alloc] INIT]自動釋放]; \t} \t \t 如果(countArray ==無){ \t \t \t \t countArray = [[[NSMutableArray裏的alloc] INIT]自動釋放]; \t} – Xcoder 2009-07-13 22:24:09

5

那麼,有一些問題正在進行;首先plist可能是一個二進制屬性列表,實際上並不是一個XML屬性列表。這在代碼方面並不重要,但應該用純文本打開來解釋問題。

其次,通過發佈tempDictionary,您也發佈了dictionary,因爲它們都指向相同的對象。這應該解釋爲什麼你的代碼不起作用。嘗試autorelease,或者簡單地dictionaryWithContentsOfFile:,並將發佈短語全部結合在一起。 (dictionaryWithContentsOfFile:將自動釋放其返回值。)

您還在第二個短語上重複釋放錯誤;賦值運算符(=)不會在Objective-C中複製;它分配

編輯:後者是不正確的時使用財產符號;假定屬性被定義; self.accountsArray = nameArray會(可能)將數組複製到對象中。

重新編輯:正確的代碼:

dictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:accountsFilePath]; 
accountsArray = [dictionary objectForKey:@"username"]; 
+0

我現在這樣做的,現在我崩潰.... \t dictionary = [NSMutableDictionary dictionaryWithContentsOfFile:accountsFilePath]; \t \t 如果(accountsArray ==無){ \t \t \t \t accountsArray = [[NSMutableArray裏的alloc] INIT]; \t} \t \t \t的NSMutableArray * nameArray = [[NSMutableArray裏的alloc] INIT]; \t nameArray = [dictionary objectForKey:@「username」]; \t \t \t accountsArray = nameArray; \t \t [nameArray release]; – Xcoder 2009-07-13 21:53:04