在我的应用程序中,我有我的主视图控制器,它显示我所有的coredata对象。
当用户添加一个对象时,它会运行并打开下一个详细信息视图以输入新对象的详细信息:
-(IBAction)addPerson:(id)sender
{
Person *p = (Person *)[NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:managedObjectContext];
PersonDetailViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"PersonDetail"];
vc.managedObjectContext = fetchedResultsController.managedObjectContext;
vc.person = p;
vc.isNewPerson = YES;
[self.navigationController pushViewController:vc animated:YES];
}
现在我在详细信息视图中有一个删除按钮,调用它:
[managedObjectContext deleteObject:person];
NSError *err;
if (![managedObjectContext save:&err])
{
// Update to handle the error appropriately.
NSLog(@"Unresolved error %@, %@", err, [err userInfo]);
exit(-1); // Fail
}
这就是我目前取消新coredata对象的方式。但是我遇到了问题。
您如何建议我最好取消创建新对象?在确认之前创建和删除,或永远不创建它?我不确定。
答案 0 :(得分:0)
在确认之前,我实际上从未创建过托管对象!
但首先我会重写PersonDetailViewController
以完全不依赖于Person
实体(松散耦合)。相反,我会在PersonDetailViewController
中为您要设置/编辑的Person
对象的各种属性定义属性,然后在保存委托方法中处理Person
被管对象的创建或者。使用这种方法,您也可以取消创建用例的一半,而无需创建新的托管对象等。
为了更好地说明,委托方法看起来有点像这样:
- (void) personDidSave: (PersonDetailViewController*) controller {
// Create a new Person object with the values from the controller
// and add persist it to core data
Person *p = (Person *)[NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:managedObjectContext];
p.name = controller.name;
p.surname= controller.surname;
// etc.
// save to core data
// Refresh the table or whatever view
}