popToViewController引发“断言失败”消息,如何解决?

时间:2010-03-08 11:37:13

标签: iphone core-data assertions

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

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

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是我数据图中的所有对象(具有反比关系,我可以从objectD通过objectC查询objectA)

引发以下错误消息:

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

这里有两个问题:

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

模型对象的核心数据对象图在这里并不直接相关;所有popToViewController:正在处理的是ViewController对象的堆栈。

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