取消新的核心数据对象?

时间:2012-11-12 13:10:48

标签: iphone objective-c core-data

在我的应用程序中,我有我的主视图控制器,它显示我所有的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对象的方式。但是我遇到了问题。

您如何建议我最好取消创建新对象?在确认之前创建和删除,或永远不创建它?我不确定。

1 个答案:

答案 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
    }