Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/99.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
Ios NSUserDefaults同步崩溃_Ios_Nsuserdefaults - Fatal编程技术网

Ios NSUserDefaults同步崩溃

Ios NSUserDefaults同步崩溃,ios,nsuserdefaults,Ios,Nsuserdefaults,我在拨打以下电话后立即在ios应用程序中遇到SIGSEGV崩溃: [[NSUserDefaults standardUserDefaults] synchronize]; 这是同步命令之后崩溃堆栈跟踪的一部分: CoreFoundation 0x31920232 CFCopyTypeIDDescription + 29 CoreFoundation 0x3191cd41 <redacted> + 204 CoreFoundation 0x31910815 <redacted&

我在拨打以下电话后立即在ios应用程序中遇到SIGSEGV崩溃:

[[NSUserDefaults standardUserDefaults] synchronize];
这是同步命令之后崩溃堆栈跟踪的一部分:

CoreFoundation 0x31920232 CFCopyTypeIDDescription + 29
CoreFoundation 0x3191cd41 <redacted> + 204
CoreFoundation 0x31910815 <redacted> + 16
CoreFoundation 0x3188e1ac <redacted> + 140
CoreFoundation 0x3189d1ff CFDictionaryApplyFunction + 158
CoreFoundation 0x3191c483 <redacted> + 282
CoreFoundation 0x318b237f CFPropertyListWriteToStream + 138
CoreFoundation 0x318b115d <redacted> + 296
CoreFoundation 0x318b1031 <redacted> + 132
CoreFoundation 0x318b03c1 <redacted> + 492
CoreFoundation 0x318b01d1 <redacted> + 20
CoreFoundation 0x318bb3ff <redacted> + 110
CoreFoundation 0x318bb8fb <redacted> + 74
CoreFoundation 0x3193cb3b <redacted> + 30
CoreFoundation 0x3193d509 <redacted> + 32
libdispatch.dylib 0x39bd54b7 <redacted> + 22
libdispatch.dylib 0x39bd99f7 <redacted> + 30
CoreFoundation 0x318c7045 CFPreferencesAppSynchronize + 312
CoreFoundation 0x31920232 CFCopyTypeIDDescription+29
CoreFoundation 0x3191cd41+204
核心基础0x31910815+16
CoreFoundation 0x3188e1ac+140
CoreFoundation 0x3189d1ff CFDictionaryApplyFunction+158
CoreFoundation 0x3191c483+282
CoreFoundation 0x318b237f CFPropertyListWriteToStream+138
核心基础0x318b115d+296
核心基础0x318b1031+132
核心基础0x318b03c1+492
核心基础0x318b01d1+20
核心基础0x318bb3ff+110
核心基础0x318bb8fb+74
核心基础0x3193cb3b+30
核心基础0x3193d509+32
libdispatch.dylib 0x39bd54b7+22
libdispatch.dylib 0x39bd99f7+30
CoreFoundation 0x318c7045 CFPreferencesAppSynchronize+312
这是一次罕见的崩溃,所以我无法重现,我的问题是:


什么会导致这样的撞车

为了避免这种情况,并更好地控制默认设置,我所做的是通过我的appDelegate(一个单例类也可以工作)将所有内容导入。其思想是,当您想要保存某些内容时,您可以将其发送到指定的对象,在我的例子中:

[appDelegate defaultsSetObject:(id)obj forKey:(NSSString *)key];
在该方法中,我复制对象和键(如果它们是可变对象)。如果我像您现在这样遇到麻烦,我可以在每次调用时调用synchronize(以强制立即失败),或者至少记录所有内容

如果您的问题很难重现,那么花时间重新组织默认代码可能是值得的。另一方面,您可以创建一个宏,用宏替换所有默认代码,并通过重新定义宏获得与我所做的类似的行为。[宏将类似于:

SAVE_OBJECT_FOR_KEY(obj, key);

在最简单的命令情况下,只需保存对象。调试时,按照我上面的建议进行复制、保存,然后进行同步。

为了避免这种情况,并更好地控制默认值,我所做的是通过我的appDelegate(单例类也可以)。其思想是,当您要保存某个内容时,将其发送到指定的对象,在我的情况下:

[appDelegate defaultsSetObject:(id)obj forKey:(NSSString *)key];
在这种方法中,我复制obj和key(如果它们是可变对象)。如果我像你现在这样遇到麻烦,我可以在每次调用时调用synchronize(以强制立即失败),或者至少记录所有内容

如果您的问题很难重现,花时间重新组织默认代码可能是值得的。另一方面,您可以创建一个宏,用该宏替换所有默认代码,并通过重新定义宏获得与我类似的行为。[该宏类似:

SAVE_OBJECT_FOR_KEY(obj, key);

在最简单的命令情况下,只需保存该对象。调试时,按照我上面的建议进行复制,保存,然后同步。

最有可能的是,先前从用户默认值返回的某个对象被过度释放。当包含该对象的NSUserDefaults中的字典被序列化为plist时,在尝试序列化时会发生崩溃e现在死掉的对象很可能是先前从用户默认值返回的某个对象被过度释放。当包含该对象的NSUserDefaults中的字典被序列化为plist时,当它尝试序列化现在死掉的对象时,会发生崩溃

在UserDefaults中保存什么?数字(int/float),字符串和日期。没什么特别的…你在UserDefaults中保存了什么?数字(int/float),字符串和日期。没什么特别的…谢谢,这是一些非常好的建议。希望它对我的情况有帮助,尽管我不能真正测试它,因为我自己无法复制崩溃。谢谢,这是一些非常好的建议。希望它对我的情况有帮助,尽管我不能真正测试它,因为我自己无法复制崩溃。