2010-03-08 69 views
1

在CoreData中,我有一些实体的数据图,每个对象都在视图控制器中填充,在一个定义的屏幕上,我想弹出一些(> 1)对象返回到定义屏幕。popToViewController引发“断言失败”消息,该如何解决?

我试图与这些行的代码以弹出视图控制器出导航堆栈的:

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]; 

的对象A,对象B,objectC,objectD是从我的数据图的所有对象(用反向关系,我可以从objectD通过objectC查询后面的对象A)

以下错误消息引发:

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

有两个问题在这里:

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

回答

2

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

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

+0

是的,谢谢Ole,我刚刚意识到:-s愚蠢的我:( – 2010-03-08 12:11:35

+0

我有另一个问题,当用户退出应用程序时,有什么策略保存/加载使用导航控制器的应用程序的配置? – 2010-03-08 12:26:19

+0

您应该在其他帖子中提出其他问题 – 2010-03-08 14:27:57

1

popToViewController:只能将您带回已存在于UINavigationController堆栈中的现有ViewController。您正在分配一个全新的控制器,然后尝试弹出。

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

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