写到plist的问题

时间:2009-07-14 21:18:20

标签: iphone cocoa-touch plist nsmutabledictionary

一切正常,直到我调用saveFile方法(如下所示)将文件写回磁盘,然后崩溃。我做错了什么?

这是我viewDidLoad方法的一部分,我打开文件,工作正常。

//Get The Path
[self initPath];

dictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:accountsFilePath];      

if (accountsArray == nil) {
    accountsArray = [[[NSMutableArray alloc]init] autorelease];
}

if (countArray == nil) {     
    countArray = [[[NSMutableArray alloc]init] autorelease];
}

countArray = [dictionary objectForKey:@"count"];
accountsArray = [dictionary objectForKey:@"username"];

然后我将它加载到tableview中。然后我添加一些新项目,它工作正常。然后我调用此方法来保存它并崩溃:

-(void)saveFile {
    [dictionary setObject:accountsArray forKey:@"username"];
    [dictionary setObject:countArray forKey:@"count"];
    [dictionary writeToFile:accountsFilePath atomically:YES];   
}

4 个答案:

答案 0 :(得分:1)

初始化后,您正在自动释放countArrayaccountsArray。当你试图保存它们时,它们可能已经被释放了。尝试为这两个人评论autorelease(并记住在某个地方发布,可能在dealloc方法中)。

答案 1 :(得分:0)

您的所有变量都在范围内吗?我假设accountsFilePath和字典是类变量?如果不是,他们可能会在viewDidLoad结束时死亡。

另一件可能会咬你的是你的字典容量太小,或者iPhone不喜欢你使用setObject方法来覆盖这样的键/值对。也许尝试调用removeObjectForKey:然后将其添加回上面?

答案 2 :(得分:0)

你可能已经这样做了,但我会在gdb中检查字典和accountsFilePath,或者在writeToFile:atomically:call之前使用NSLog。

您可能还想分享更多周围的代码,以显示与此词典相关的其他内容。

我一直在使用NSZombie成功调试随机崩溃。

答案 3 :(得分:0)

//如果找不到路径,文件没有加载,反过来字典就是nil

dictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:accountsFilePath];

//首次创建accountsArray,countArray

if (accountsArray == nil) {
    accountsArray = [[[NSMutableArray alloc]init] autorelease]; }

if (countArray == nil) {     
    countArray = [[[NSMutableArray alloc]init] autorelease]; }

//嘿嘿为什么你再次将accountsArray分配给一个新的,那你刚刚初始化的那个怎么样?

//如果字典为零,则countarray也将为零

countArray = [dictionary objectForKey:@"count"];
accountsArray = [dictionary objectForKey:@"username"];

//// //// ////////////////////////////////////////////////// //////////////

你的崩溃讯息是什么?

您的accountsFilePath

是什么

你能读懂字典文件吗?

你可能想知道的一件事

writeToFile不会为您创建新文件夹

所以accountsFilePath中的所有文件夹都必须存在。

否则您可能希望使用nsfilemanager

创建该文件夹