1

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

ここで 2 つの質問があります。

  • 2 つのオブジェクトが異なる場合、どうして同じ名前になったのでしょうか? 逆の関係は、MyViewController を初期化するために使用した objectA を取り戻すことはできませんか?
  • 通常、popToViewController はどのように実行しますか? アプリケーションが終了したときにナビゲーションコントローラーをリロードできるように、ナビゲーションコントローラーの現在の状態を保存/ロードする方法を実装するにはどうすればよいですか? ベストプラクティスは何ですか?
4

2 に答える 2

2

これは Core Data とは関係ありません。既存の MyViewController インスタンスを参照するだけでよい場合は、新しいビュー コントローラーを作成しています。新しく作成されたコントローラーは明らかにナビゲーション コントローラーのスタック上にないため、それに切り替えようとすると例外が発生します。

配列を使用しself.navigationController.viewControllersて、nav コントローラーのスタックに既にあるコントローラーを参照します。

于 2010-03-08T11:56:02.283 に答える
1

popToViewController: UINavigationController のスタックに既に存在する既存の ViewController にのみ戻ることができます。まったく新しいコントローラーを割り当ててから、それにポップしようとしています。

モデル オブジェクトの Core Data オブジェクト グラフは、ここでは直接関係ありません。すべての popToViewController: が扱うのは、ViewController オブジェクトのスタックです。

特定の ViewController にポップするには、その ViewController オブジェクトへの参照が必要です。

于 2010-03-08T11:57:08.993 に答える