1

在 CoreData 中,我有一些实体的数据图,并且每个对象都填充在视图控制器中,在定义的屏幕上,我想弹出一些 (>1) 对象以返回到定义的屏幕。

我尝试使用以下代码行将视图控制器从导航堆栈中弹出:

ObjectA *objectA = objectD.objectC.objectA;
NSLog(@"objectA name: %@", objectA.name);
MyViewController    *controller = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil withObjectA:objectA];
[self.navigationController popToViewController:controller animated:YES];
[controller release];

objectA,objectB,objectC,objectD都是我的数据图中的对象(反向关系,我可以通过objectC从objectD查询回objectA)

引发以下错误消息:

Assertion failure in -[UINavigationController popToViewController:transition:], /SourceCache/UIKit_Sim/UIKit-984.38/UINavigationController.m:1807

这里有两个问题:

  • 如果两个对象不同,为什么它们具有相同的名称?反向关系无法取回我用来初始化 MyViewController 的 objectA?
  • 你平时是怎么做popToViewController的?如何实现保存/加载导航控制器的当前状态,以便当应用程序退出时,我可以重新加载导航控制器?最佳实践是什么?
4

2 回答 2

2

这与核心数据无关。当您应该只引用现有的 MyViewController 实例时,您正在创建一个新的视图控制器。新创建的控制器显然不在导航控制器的堆栈中,因此当您尝试切换到它时会出现异常。

使用self.navigationController.viewControllers数组来引用已经在导航控制器堆栈上的控制器。

于 2010-03-08T11:56:02.283 回答
1

popToViewController: 只能带你回到已经在 UINavigationController 堆栈上的现有 ViewController。您正在分配一个全新的控制器,然后尝试弹出它。

模型对象的 Core Data 对象图在这里没有直接关系;所有 popToViewController: 正在处理的是 ViewController 对象的堆栈。

要弹出到特定的 ViewController,您需要对该 ViewController 对象的引用。

于 2010-03-08T11:57:08.993 回答