CoreDataからデータをロードするオブジェクトがあります。次に、ユーザー入力/選択を使用してオブジェクトを変更します。
私の最初は、プロパティのセッターメソッドをオーバーライドすることでした。
-(void)setType:(NSString *)type {
NSLog(@"setType fired | newType: %@", type);
_type = type;
appDelegate *appDelegate = (appDelegate *)[[UIApplication sharedApplication] delegate];
NSManagedObjectContext *context = [appDelegate managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:DEFAULTS_DB];
NSError *error;
NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];
if (fetchedObjects.count == 1) {
Defaults *defaults = [fetchedObjects objectAtIndex:0];
defaults.sceneType = type;
}
if (![context save:&error]) {
NSLog(@"Error in saving first run defaults | error: %@", error);
}
else {
NSLog(@"new type was saved to core data");
}
}
applicationWillResignActive:
私の他の考えは、起動時(ただし、アプリがフリーズする前に実行するのに数秒しかかからない)とユーザーがログアウトしたときにコアデータを更新することでした。
私が作成しているアプリは、ユーザーが起動し、必要なものを設定してから、再び使用するまで10〜60分置いておくものです。そのため、非アクティブなときにアプリが強制終了され、データが失われるのではないかと心配しています。
セッターメソッドでコアデータを更新することは、更新を処理するための良い方法ですか、それとも本当に悪い考えですか(リソースを大量に消費し、遅すぎる)?