2009-07-13 70 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