请你帮我解决以下问题
我使用CoreData编写应用程序,并有两个视图控制器。
ControllerA是一个表视图,只列出数据 ControllerB是一个包含多个UITextFields
的视图控制器要在ControllerA上编辑行,我在ControllerB上设置了一个传递我的CoreData实体模型对象的属性 例如。
viewControllerB.item = [self.fetchedResultsController objectAtIndexPath:indexPath];
编辑完成后,ViewControllerB上的项目内容将通过委托传递回ViewControllerA并保存。
这很好用,我正在努力解决的问题是在没有在ViewControllerB上设置managedObjectContext的情况下向CoreData添加新项目的最佳方法。
我尝试使用
传递新对象ItemData *item = [NSEntityDescription insertNewObjectForEntityForName:@"ItemData" inManagedObjectContext:self.managedObjectContext];
viewControllerB.item = item;
如果我在ViewControllerB上输入带有数据的表单,这是有效的,但如果我取消视图并将其弹出,我将在CoreData中留下一个(null)对象。
我也尝试使用标准init实例化CoreData ItemData对象,但现在明白这不起作用,因为CoreData不理解上下文,也没有属性的getter / setter。
这种情况的最佳做法是什么?
1)我应该将managedObjectContext传递给viewControllerB吗? 2)创建一个模型类来保存表单中的值并将其传递回来然后处理CoreData的东西?
3)或者是否有正确的方法来做我想做的事情?
我正在松散地关注iOS Apprentice 2以处理Storyboard等,但是在这个模型类中来回传递,我知道它工作正常,它的CoreData方面就是问题所在。
我希望以上内容清楚明确,并且我使用的术语是正确的。
期待任何帮助。
答案 0 :(得分:0)
如果我在ViewControllerB上输入带有数据的表单,这是有效的,但如果我取消视图并将其弹出,我将在CoreData中留下一个(null)对象。
如果您关闭视图,则需要删除该对象,如果您不希望它保留。因此,如果有人在您的视图中点击“中止”,则应致电
[self.managedObjectContext deleteObject:theManagedObject];
在控制器之间传递托管对象上下文有许多可能的方法。您的AppDelegate应将托管对象上下文作为属性。
如果控制器a有一个指向上下文的指针,你可以将它传递给控制器B的(nonatomic, weak)
属性。