我的应用程序只是使用 Core Data 添加了一些用户信息(姓名、生日、缩略图……)。
我注意到,如果我在创建用户后立即删除它,我的应用程序就会停止工作(不是崩溃,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
is aNSPrivateQueueConcurrencyType
和self.backgroundManagedObjectContext
is a 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]);
}
有人可以知道如何正确处理这种情况吗?