0

一切正常,直到我调用该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"];

然后我将它加载到一个表格视图中。然后我向其中添加了一些新项目,效果很好。然后我调用这个方法来保存它并且它崩溃了:

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

4 回答 4

1

您正在自动发布countArray,并且accountsArray在初始化它们之后。当您尝试保存它们时,它们很可能已经被释放。尝试autorelease为他们俩评论(并记住在某个地方发布它们,也许在dealloc方法中)。

于 2009-07-15T03:33:15.520 回答
0

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

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

于 2009-07-14T21:32:47.833 回答
0

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

您可能还想分享更多的周边代码,以展示与这本词典相关的其他内容。

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

于 2009-07-15T02:42:53.613 回答
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 分配给一个新的,你刚刚初始化的旧的呢?

// 如果字典为 nil,countarray 也将为 nil

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

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

你的崩溃信息是什么?

你的帐户文件路径是什么

你能读懂字典文件吗?

你可能想知道的一件事

writeToFile 不会为您创建新文件夹

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

否则您可能需要使用 nsfilemanager 创建该文件夹

于 2009-07-15T06:59:47.180 回答