保存一个plist的问题

时间:2010-12-23 05:22:31

标签: iphone plist

我试图使用plist来存储一个包含以下代码的数组:

NSString *name = firstName.text;
    NSString *path = [[NSBundle mainBundle] pathForResource:@"Names" ofType:@"plist"];

    NSMutableArray *namesArray = [[NSMutableArray alloc] initWithContentsOfFile:path];

    [namesArray addObject:name];

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    [paths release];
    NSString *docDirPath = [documentsDirectory stringByAppendingPathComponent:@"Names.plist"];
    [namesArray writeToFile:docDirPath atomically:YES];

    namesArray = [[NSMutableArray alloc] initWithContentsOfFile:docDirPath];

此代码似乎有效。使用NSLog,我发现在执行此代码后,plist包含我想要的内容,但是,我的程序崩溃,因为它在设备上生成EXC_BAD_ACCESS,并且在模拟器上它只是崩溃而没有一个解释。有谁知道为什么会发生这种情况?

2 个答案:

答案 0 :(得分:2)

 NSArray *paths = NSSearchPathForDirectoriesInDomains
(NSDocumentDirectory, NSUserDomainMask, YES); //Auto-released array

NSString *documentsDirectory = [paths objectAtIndex:0];

[paths release]; //Oh noes!

您不拥有对paths的引用,因此请勿释放它。删除[paths release]我会打赌你很好。您崩溃了,因为自动释放池在您自己完成之后正在释放路径。

Quoth the guide

  

您只释放或自动释放您拥有的对象。如果使用名称以“alloc”或“new”开头或包含“copy”的方法创建对象,或者向其发送保留消息,则获取对象的所有权。

答案 1 :(得分:0)

您是否检查过,它在哪个位置发出EXC_BAD_ACCESS错误。

在你的代码中有两个错误的东西;那些是。

Plist文件包含字典而不是数组。在代码中,您将文件数据复制到数组中。并将数组保存到plist文件。

第二个是你正在发布“paths”数组,但没有完成它的使用。你必须在语句结束时释放该数组;比如将数组更新到文件后。

此致

萨蒂亚