选项卡栏视图中的托管对象上下文

时间:2009-10-27 00:21:05

标签: iphone core-data iphonecoredatarecipes

确定。这是一个挑战。

我在导航控制器中有一个tableview。

我从root用户推送它,在那里我有一个允许我添加新记录的添加操作。这很好。

现在我尝试做的是将此tableview添加到标签栏视图(没有标签栏控制器,因为它不起作用)但在同一个导航控制器中。

所以我想做的是:Root> TabBarView(加载Tableview)>添加新记录。

问题在于托管对象上下文,我得到了整个“无法找到实体错误”,但我不知道如何解决它。

我已经设法从tabBarView中显示AddRecord模式视图控制器,但是它没有导航栏,而如果我尝试在单独的tableView中添加记录(在tabbar之外)它没问题

我现在从TabBarView的navigationBarbuttons调用我的方法,路由到tableviews方法。

我知道我的方法必须从tabBarView而不是现在的实际tableview调用,并且它们会触发,但我不知道如何在tabView中管理MOC。

哦,这是基于coredata配方和书籍,因此当激活添加记录方法时,它会创建一个新的MOC来创建它,然后在完成后重新集成到主MOC中。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

就主要的MOC而言,视图和控制器应该是无关紧要的。在您使用的任何控制器中获取对MOC的引用,并使用该MOC进行操作。如果您的应用程序委托创建主MOC,请将其作为该委托的属性,并从您的视图或选项卡控制器访问该属性。

我不太关注你所遇到的导航问题,但如果你需要导航栏时没有导航栏,我怀疑你需要在你添加UIViewController子类的地方创建和添加UINavigationController。使子类成为新UINavigationController的根,并将控制器放入选项卡或其他任何内容。

您的托管对象上下文(MOC)不应依赖于导航或视图。它是模型的一部分。 (尽管如您所知,可取消编辑视图的第二个MOC 依赖于导航到您创建它以供编辑器使用的范围。)

答案 1 :(得分:0)

听起来你有几个问题。

  1. “找不到实体”错误 - 这取决于您正在使用的托管对象上下文。如果您创建了一个单独的MOC来管理您正在编辑的对象(顺便说一句,这是一个好主意),请确保为其分配持久性存储协调器。这是MOC发现可用对象的方式。如果您正在使用在App Delegate中创建的MOC,请确保正确拼写实体的名称。
  2. 工作表中没有导航栏 - 将视图控制器推送到导航控制器时,其navigationItem用于填充导航栏。将视图控制器显示为工作表时,仅显示视图控制器。它未嵌入导航控制器中。为了显示导航项,您需要创建一个以视图控制器为根的新导航控制器,然后显示导航控制器的视图。