Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.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 setObject在线程中崩溃_Ios_Crash_Nsuserdefaults_Ios9 - Fatal编程技术网

Ios NSUserDefaults setObject在线程中崩溃

Ios NSUserDefaults setObject在线程中崩溃,ios,crash,nsuserdefaults,ios9,Ios,Crash,Nsuserdefaults,Ios9,我在后台做一些事情。我还尝试将对象写入标准用户默认值。 自从iOS 9以来,它正在崩溃 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ // calling some methods in the background // also save a value to the user defaults NSDate *aDate = [NSDate date]; [[NSUserD

我在后台做一些事情。我还尝试将对象写入标准用户默认值。 自从iOS 9以来,它正在崩溃

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

// calling some methods in the background
// also save a value to the user defaults
NSDate *aDate = [NSDate date];
[[NSUserDefaults standardUserDefaults] setObject:aDate forKey:@"date"]; // <-- crash: EXC_BAD_ACCESS

});
dispatch\u async(dispatch\u get\u global\u queue(dispatch\u queue\u PRIORITY\u DEFAULT,0)^{
//在后台调用某些方法
//还将值保存到用户默认值
NSDate*aDate=[NSDate日期];
[[NSUserDefaults standardUserDefaults]setObject:aDate forKey:@“date”];//来自:

NSUserDefaults类是线程安全的

发布的代码没有问题。您的错误在别处

编辑:堆栈指出了错误的来源:

在代码的其他地方,您(或某些第三方库)正在向
[NSUserDefaults standardUserDefaults]
添加KVO观察者。但是,
NSUserDefaults
不兼容KVO,因此无法添加观察者

如果需要对用户默认设置的更改作出反应,则必须使用
NSNotificationCenter
并注册
nsUserDefaultsIDChangeNotification

第二次编辑:不确定这是什么时候改变的,但在现代iOS和macOS中
NSUserDefaults
是可以观察到的关键值。与上面链接的相同文档现在清楚地说明:

您可以使用key-value observing为感兴趣的特定密钥注册观察员,以便收到本地默认数据库所有更新的通知。有关更多详细信息,请参阅key-value observing编程指南


你在同一行上遇到崩溃了吗?我想崩溃是从其他地方发生的。我使用了上面的代码,没有遇到任何崩溃。你能试着用同一个键插入字符串吗?我在其他方法中也遇到了崩溃,我使用了NSUserDefaults setObject:崩溃总是在setObject:@Matt Post a full stack t一行中race.Show more code.@Nikolai刚刚添加了堆栈跟踪。如果我取消对代码中的行的注释,它将再次崩溃,在调用NSUserDefaults setObject:的地方。我知道它是线程安全的。但是只有当我在其他方法中调用NSUserDefaults时才会发生崩溃。@Matt正如我所说的,您提供的代码和信息中没有问题。crash您正在代码中遇到来自其他位置的结果。如果没有更多信息,我们将无法帮助您。这真的很奇怪。我没有发现任何遵守[NSUserDefaults standardUserDefaults]的代码。我还删除了所有库。但它只显示在后台线程中。如果我在主线程上调用它,它会工作。我可以尝试查找问题吗?NSZombieEnabled没有帮助,因为如果我启用它,崩溃不会出现。@Matt在
-[NSObject addObserver:forKeyPath:options:context:]中设置符号断点
,添加一个条件
(BOOL)[$arg1 isKindOfClass:[NSUserDefaults class]]]
,然后运行你的应用程序。当调试器停止时,它会指向有问题的代码。非常感谢!我没有找到一个观察者。它应该只用于Mac库,但也用于iOS。