,直到我调用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];   
}
有帮助吗?

解决方案

//如果未找到路径,文件不被加载和反过来字典是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"];

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

什么是你崩溃的消息?

什么是你accountsFilePath

你能读取字典文件?

你可能想知道一件事

将writeToFile不会为你创建一个新的文件夹

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

,否则你可能想使用的NSFileManager来创建该文件夹

其他提示

您只是初始化之后他们自动释放countArrayaccountsArray。泰德很可能当您试图救他们被已经发布。尝试评论对他们俩的autorelease(记住某处释放他们,也许在dealloc法)。

在范围内所有的变量?我认为accountsFilePath和字典的类变量?如果不是,他们可能在viewDidLoad中的端部死亡。

这可能会咬你的是你的字典容量的另一件事是太小了,或者说iPhone不使用setObject方法来覆盖这样的键/值对喜欢你。也许尝试调用removeObjectForKey:再添加回去,你有上述

您可能已经这样做,但我会检查字典和accountsFilePath在gdb或者通过将writeToFile前右使用的NSLog:原子:拨打

您可能也想分享更多周围的代码显示还有什么相对于去上这本词典。

我已经使用NSZombie与调试随机崩溃以及取得多大成功。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top