私のアプリは、コアデータを使用していくつかのユーザー情報(名前、生年月日、サムネイルなど)を追加するだけです。
ユーザーを作成した直後に削除すると、アプリが機能しなくなることに気付きました(クラッシュではなく、xCodeはクラッシュログを返さず、何も返しません)。
ユーザー情報を保存するために非同期のネストされたコンテキストを使用しているので、動作はdelete
ステートメントがステートメントの前に実行されているためだと思いsave
ます。
しかし、私はCore Dataの初心者なので、それを処理する方法がよくわかりません。ネストされたコンテキストを正しい方法で宣言したかどうかさえわかりません。
これが私のsave
コードです:
NSManagedObjectContext *tmpContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
tmpContext.parentContext = self.backgroundManagedObjectContext;
BSStudent *newStudent = (BSStudent *)[NSEntityDescription insertNewObjectForEntityForName:kBSStudent inManagedObjectContext:tmpContext];
newStudent.firstname = firstname;
newStudent.lastname = lastname;
newStudent.birthdate = birthdate;
newStudent.thumbnail = thumbnail;
newStudent.createdAt = [NSDate date];
[self dismissViewControllerAnimated:YES completion:nil];
[tmpContext performBlock:^{
[tmpContext save:nil];
[self.backgroundManagedObjectContext performBlock:^{
NSError *error;
if (![self.backgroundManagedObjectContext save:&error]) {
NSLog(@"%@", [error localizedDescription]);
}
[self.managedObjectContext performBlock:^{
NSError *error;
if (![self.managedObjectContext save:&error]) {
NSLog(@"%@", [error localizedDescription]);
}
}];
}];
}];
精度のために、self.managedObjectContext
はaNSPrivateQueueConcurrencyType
であり、self.backgroundManagedObjectContext
はNSMainQueueConcurrencyType
です。そしてself.backgroundManagedObject
の子ですself.managedObjectContext
。
これが私の削除コードです:
BSStudent *student = objc_getAssociatedObject(alertView, kDeleteStudentAlertAssociatedKey);
// on supprimer l'objet et on sauvegarde le contexte
[self.managedObjectContext deleteObject:student];
NSError *error;
if(![self.managedObjectContext save:&error]) {
NSLog(@"%@", [error localizedDescription]);
}
誰かがこの状況を適切に処理する方法を知ることができますか?