2010-12-23 78 views
1

我试图使用的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
NSArray *paths = NSSearchPathForDirectoriesInDomains 
(NSDocumentDirectory, NSUserDomainMask, YES); //Auto-released array 

NSString *documentsDirectory = [paths objectAtIndex:0]; 

[paths release]; //Oh noes! 

您不拥有对paths的引用,所以请勿将其释放。删除[paths release],我敢打赌你没事。你已经崩溃了,因为自动释放池在你自己完成之后释放路径。

答曰the guide

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

0

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

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

Plist文件由一个字典而不是一个数组组成,在这里代码中您将文件数据复制到一个数组中。并将数组保存到plist文件。

第二个是你正在发布“路径”数组,没有完成它的使用。你必须在声明结尾处释放该数组;就像在将数组更新到文件之后一样。

问候,

萨蒂亚