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

Iphone popToViewController引发“;断言失败“;消息,如何解决?,iphone,core-data,assertions,Iphone,Core Data,Assertions,在CoreData中,我有一些实体的数据图,每个对象都填充在视图控制器中,在定义的屏幕上,我想弹出一些(>1)对象以返回到定义屏幕 我尝试使用以下代码行将视图控制器从导航堆栈中弹出: ObjectA *objectA = objectD.objectC.objectA; NSLog(@"objectA name: %@", objectA.name); MyViewController *controller = [[MyViewController alloc] initWithNibN

在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?如何实现保存/加载导航控制器的当前状态,以便在应用程序退出时重新加载导航控制器?最佳实践是什么

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


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

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

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


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

      我还有一个问题,当用户退出应用程序时,保存/加载使用导航控制器的应用程序配置的策略是什么?您应该在另一篇博文中问这个问题。您好,Marcus,谢谢你的建议。我在想,在发布之前,我是否应该再问一个问题或做更多的研究;)