Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 用户默认读取崩溃真的很不寻常_Objective C_Nsmutablearray_Nsuserdefaults - Fatal编程技术网

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]
Obs.:由于您的代码显示了一个
NSMutableArray
,我只想指出(根据苹果的说法):

从NSUserDefaults返回的值是不可变的,即使将可变对象设置为值也是如此。例如,如果将可变字符串设置为“MyStringDefault”的值,则稍后使用stringForKey:检索的字符串将是不可变的

  • 您存储的数据是否太大?我无法在NSUserDefaults上找到“太多数据”的定义,但我猜如果数据集太大,可能会发生奇怪的事情。您是否可以尝试将这些数据存储在文件中?有一个非常简单的解决方案
您不能使用给定的代码使应用程序崩溃。您的问题在别处。请参阅编辑。我的想法是这样的,但是看到日志首先尝试在本地获取该数组(删除return语句)-NSArray*checkArray=[[NSUserDefaults standardUserDefaults]objectForKey:@“tempImagesArray”];NSLog(@“%@”,校验数组);结果是什么?检查一下这个“检查您使用的密钥是否被项目中的其他库使用”。我已经试过了。它在日志中崩溃了。