0

我正在尝试按照此处答案中的建议从 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 是 .h 文件中的 NSMustableArray。

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

 dictionary = tempDictionary;
 [tempDictionary release];


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

 accountsArray = nameArray;

 [nameArray release];

我错过了什么吗?搞砸什么?

谢谢...

4

2 回答 2

5

好吧,有许多问题正在发生;首先,plist 可能是一个二进制属性列表,而不是一个 XML 属性列表。这在代码方面并不重要,但应该有助于解释以纯文本形式打开的问题。

其次,通过 release tempDictionary,您也正在释放dictionary,因为它们都指向同一个对象。这应该有助于解释为什么您的代码不起作用。试试autorelease,或者干脆dictionaryWithContentsOfFile:把发布短语一起去掉。(dictionaryWithContentsOfFile:将自动释放其返回值。)

您还重复了第二个短语的释放错误;赋值运算符 ( =) 不会在 Objective-C 中复制;它分配.

编辑:使用属性表示法时后者不正确;假设定义了属性;self.accountsArray = nameArray将(可能)将数组复制到对象中。

重新编辑:正确的代码:

dictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:accountsFilePath];
accountsArray = [dictionary objectForKey:@"username"];
于 2009-07-13T21:14:48.970 回答
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"];
于 2009-07-13T22:21:45.667 回答