2010-03-08 49 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對象的引用。