【发布时间】:2013-01-27 00:28:31
【问题描述】:
我的应用只是使用 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 是 NSPrivateQueueConcurrencyType,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]);
}
有人知道如何正确处理这种情况吗?
【问题讨论】:
标签: ios core-data asynchronous crash nested