0

modalView を閉じている間、変更を保存しNSUserDefaultsて method で同期します"saveinUserDeaultsObjects"

現在、このプロセスを 2 回繰り返すと、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