0

在关闭 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]
4

0 回答 0