我试图使用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
,并且在模拟器上它只是崩溃而没有一个解释。有谁知道为什么会发生这种情况?
答案 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”数组,但没有完成它的使用。你必须在语句结束时释放该数组;比如将数组更新到文件后。
此致
萨蒂亚