2

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

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

4

1 回答 1

0

在确认之前,我实际上永远不会创建托管对象!

但首先,我将重写PersonDetailViewController为根本不依赖Person实体(松散耦合)。相反,我会为您想要设置/编辑PersonDetailViewController的对象的各种属性定义属性,然后在保存委托方法左右处理托管对象的创建。使用这种方法,您还可以取消创建用例一半,而无需创建新的托管对象等。PersonPerson

为了更好地说明,委托方法看起来有点像这样:

- (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
    }
于 2012-11-12T13:54:47.387 回答