【发布时间】:2015-09-29 18:53:39
【问题描述】:
我正在后台做一些事情。我也尝试将对象写入标准用户默认值。 从 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
});
我找不到问题。 aDate 不为零。我也尝试在主线程(从后台线程)上执行 setObject:,但结果相同。
崩溃是零星的! 我做错了什么?
这是堆栈跟踪:
崩溃:com.apple.root.background-qos EXC_BAD_ACCESS KERN_INVALID_ADDRESS 在 0x0000000000000010
线程:崩溃:com.apple.root.background-qos 0 libobjc.A.dylib
0x0000000199b0dbd0 objc_msgSend + 16 1 基础
0x0000000185ea1eb4 -[NSObject(NSKeyValueObserverNotification) willChangeValueForKey:] + 324 2 核心基础
0x0000000185090994 _CFPreferencesSetValueWithContainer + 168 3 基础 0x0000000185eb9138 -[NSUserDefaults(NSUserDefaults) setObject:forKey:] + 56 4 AIR 0x00000001000f201c -[ServerSyncAgent syncUnsyncedEntities] (ServerSyncAgent.m:212) 5 libdispatch.dylib
0x000000019a2e97b0 _dispatch_call_block_and_release + 24 6 libdispatch.dylib 0x000000019a2e9770 _dispatch_client_callout + 16 7 libdispatch.dylib 0x000000019a2f7bb0 _dispatch_root_queue_drain + 2140 8 libdispatch.dylib 0x000000019a2f734c _dispatch_worker_thread3 + 112 9 libsystem_pthread.dylib 0x000000019a4fd478 _pthread_wqthread + 1092
【问题讨论】:
-
你是不是在同一条线上崩溃了?我认为坠机是从其他地方发生的。我已经使用了上面的代码,没有遇到任何崩溃。
-
你可以尝试用相同的键插入字符串吗?
-
我在其他方法中也遇到了崩溃,我使用 NSUserDefaults setObject:崩溃总是在 setObject 行中:
-
@Matt 发布完整的堆栈跟踪。显示更多代码。
-
@Nikolai 刚刚添加了堆栈跟踪。如果我在代码中取消注释该行,它将再次崩溃,其中 NSUserDefaults setObject: 被调用。
标签: ios crash nsuserdefaults ios9