在关闭 modalView 时,我将更改保存NSUserDefaults
并在方法中同步它们"saveinUserDeaultsObjects"
。
现在,重复这个过程两次会导致 exc bad access 崩溃。(即呈现和解散)。
viewcontroller
但是,如果我使用执行选择器在 1 秒延迟后关闭,则应用程序可以正常工作。
我能从中推断出什么?- 我认为NSUserdefaults
在传递的对象被释放时写需要一些时间。如果是这样的情况如何处理?
- (void)dismissViewController {
[Utils saveinUserDeaultsObjects:self.sortVlaue Forkey:@"SortByValue"];
[Utils saveinUserDeaultsObjects:self.state Forkey:@"State"];
[Utils saveinUserDeaultsObjects:self.topic Forkey:@"AOPString"];
[self dismissViewControllerAnimated:YES completion:^{}];
}
谢谢你。
更新
+ (void)saveinUserDeaultsObjects:(NSString )valueObject Forkey:(NSString)key {
//NSLog(@"SaveUseref for key: %@ object: %@",key, valueObject);
NSUserDefaults *userPreferences = [NSUserDefaults standardUserDefaults];
[userPreferences setObject:valueObject forKey:key];
[userPreferences synchronize];
}
更新 2
+ (NSString )retriveFromUserDeaultsStringForkey:(NSString)key {
NSUserDefaults *userPreferences = [NSUserDefaults standardUserDefaults];
NSString *value = nil;
if (userPreferences) value = (NSString *)[userPreferences objectForKey:key];
return value;
}
它偶尔显示的崩溃是在读取上面的“值”对象时。主要是 EXC 错误访问,malloc 堆栈跟踪是:
12: 0x1c0b85f in -[CFXPreferencesPropertyListSourceSynchronizer createPlistFromDisk]
13: 0x1bdfc56 in -[CFXPreferencesPropertyListSourceSynchronizer synchronizeAlready]