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]