在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
这里有两个问题:
答案 0 :(得分:2)
这与核心数据无关。您应该只引用现有的MyViewController实例时创建一个新的视图控制器。新创建的控制器显然不在导航控制器的堆栈上,因此当您尝试切换到它时会出现异常。
使用self.navigationController.viewControllers
数组引用已存在于导航控制器堆栈上的控制器。
答案 1 :(得分:1)
popToViewController:只能带你回到已经在UINavigationController堆栈上的现有ViewController。你正在分配一个全新的控制器,然后尝试弹出它。
模型对象的核心数据对象图在这里并不直接相关;所有popToViewController:正在处理的是ViewController对象的堆栈。
要弹出到特定的ViewController,您需要对该ViewController对象的引用。