我在使用 NSUserDefaults 时发生了奇怪的崩溃,我自己无法重现此问题,但我从用户设备之一的 Crashlytics 收到此报告。
Exception: EXC_BAD_ACCESS KERN_INVALID_ADDRESS 0x0000000000000000
Crashed: com.apple.NSURLConnectionLoader
0 libobjc.A.dylib 0x22613a76 objc_msgSend + 21
1 CoreFoundation 0x22e97a58 __CFBasicHashDrain + 448
2 CoreFoundation 0x22d77795 CFRelease + 424
3 CoreFoundation 0x22e979e8 __CFBasicHashDrain + 336
4 CoreFoundation 0x22d77795 CFRelease + 424
5 CoreFoundation 0x22e26b8f -[CFPrefsSearchListSource alreadylocked_copyDictionary] + 906
6 CoreFoundation 0x22e258ad -[CFPrefsSearchListSource alreadylocked_copyValueForKey:] + 52
7 CoreFoundation 0x22e9f6bb -[CFPrefsSource copyValueForKey:] + 50
8 CoreFoundation 0x22ea1e3d ___CFPreferencesCopyAppValueWithContainerAndConfiguration_block_invoke + 28
9 CoreFoundation 0x22e23969 __95+[CFPrefsSearchListSource withSearchListForIdentifier:container:cloudConfigurationURL:perform:]_block_invoke + 400
10 CoreFoundation 0x22e2377f normalizeQuintuplet + 354
11 CoreFoundation 0x22e23617 +[CFPrefsSearchListSource withSearchListForIdentifier:container:cloudConfigurationURL:perform:] + 106
12 CoreFoundation 0x22ea1dc9 _CFPreferencesCopyAppValueWithContainerAndConfiguration + 248
13 Foundation 0x235c436f -[NSUserDefaults(NSUserDefaults) objectForKey:] + 46
14 MyApp 0x12ddc49 -[MyStore getConfigValue:] (MyStore.m:43)
MyStore 中的代码如下:
- (id) getConfigValue:(NSString *)key {
if (key) {
return [[NSUserDefaults standardUserDefaults] valueForKey:key];
}
return nil;
}
我称这个方法如下
NSString *userId = [storeObj getConfigValue:@"UserID"];
现在,在某些情况下可能不会设置此值,但应该只返回 nil。我找不到任何导致崩溃的正当理由。
感谢帮助。