我有一个对象队列存储到NSUserDefaults
。当我需要将对象添加到它,我把下面的方法:iOS 8冻结在更新UserDefaults对象
+ (void)addCodeToQueue:(Code *)code {
// Note: userDefaults is a static, initialized variable
NSDictionary *codeModel = [self generateCodeModelWith:code];
// Read array from UserDefaults, or create one if nil
NSMutableArray *codeQueue = [userDefaults mutableArrayValueForKey:@"CodeQueue"] ? : [[NSMutableArray alloc] init];
// Add code model
[codeQueue addObject:codeModel];
// Add/replace array & sync
[userDefaults setObject:codeQueue forKey:@"CodeQueue"]; // App freezes here if uncommented
[userDefaults synchronize];
}
当我打电话setObject:forKey
我的应用程序冻结。如果我为该行添加一个断点,继续运行,它将起作用。如果我不休息,它会冻结。
在我将Xcode更新到版本8并开始使用新的SDK之后,开始发生这种情况。 关于此的任何提示?
它的工作,谢谢。把它作为一个不可变数组存储起来还是不会有什么区别? – Guilherme 2014-09-24 12:33:40
一旦存储它就不应该存在 - 即使它来自可变对象,您放入NSUserDefaults系统的任何内容都将被永久存储。很高兴它的工作!我正在修复一些旧应用程序,因为同样的原因我们挂了这些应用程序。 – TomRicket 2014-09-25 20:07:49
在我的情况下,它反向工作,我必须保存为NSArray。怪异的事情发生在iOS 8. :-( – Evilripper 2014-09-30 09:49:56