Objective c 用户默认读取崩溃真的很不寻常
从Objective c 用户默认读取崩溃真的很不寻常,objective-c,nsmutablearray,nsuserdefaults,Objective C,Nsmutablearray,Nsuserdefaults,从NSUserDefaults读取时,我无缘无故发生崩溃。我第一次读它的时候感觉很好。我得到了数据,一切正常。第二次,我得到崩溃/我得到空值 我已经检查过的东西: 不,我不会在其他地方删除它 不,没有其他人在同一时间打电话 如果是零?它不应该是零,也没有我可以擦除它的地方,在第一次(有数据)和第二次(崩溃)之间,甚至没有人碰它 它保存了NSData的NSMutableArray,这可能很好,因为它可以在第一次调用时工作 可能是什么 return [[NSUserDefaults standa
NSUserDefaults
读取时,我无缘无故发生崩溃。我第一次读它的时候感觉很好。我得到了数据,一切正常。第二次,我得到崩溃/我得到空值
我已经检查过的东西:
- 不,我不会在其他地方删除它
- 不,没有其他人在同一时间打电话
- 如果是零?它不应该是零,也没有我可以擦除它的地方,在第一次(有数据)和第二次(崩溃)之间,甚至没有人碰它
- 它保存了
的NSData
,这可能很好,因为它可以在第一次调用时工作NSMutableArray
return [[NSUserDefaults standardUserDefaults]objectForKey:@"tempImagesArray"];
我甚至没有把代码保存下来,因为我在第一次启动应用程序时保存了它,第二次我甚至没有保存任何东西,它是上次在内存中保存的。(第一次呼叫时在那里,第二次呼叫时不在那里)
编辑:::我在崩溃时看到的汇编程序:
0x19f8e2c: movl %eax, (%esp)
0x19f8e2f: calll 0x1bcdfee ; symbol stub for: objc_msgSend
0x19f8e34: jmp 0x19f8e38 ; -[NSUserDefaults(NSUserDefaults) objectForKey:] + 74
0x19f8e36: xorl %eax, %eax
0x19f8e38: addl $20, %esp
我想到了两件事:
- 在将数组设置到默认字典中后,是否正在调用
[[NSUserDefaults standardUserDefaults]synchronize]
NSMutableArray
,我只想指出(根据苹果的说法):
从NSUserDefaults返回的值是不可变的,即使将可变对象设置为值也是如此。例如,如果将可变字符串设置为“MyStringDefault”的值,则稍后使用stringForKey:检索的字符串将是不可变的
- 您存储的数据是否太大?我无法在NSUserDefaults上找到“太多数据”的定义,但我猜如果数据集太大,可能会发生奇怪的事情。您是否可以尝试将这些数据存储在文件中?有一个非常简单的解决方案李>