1

Xcode 4.5 のボイラープレート マスター/ディテール アプリケーションから作成されたアプリがあり、CoreData、StoryBoards、および ARC がオンになっていて、prepareForSegue を呼び出していません。CoreData は現在使用されていませんが、XML 応答をキャッシュするために使用されます。performSegueWithIdentifier は機能しますが、prepareForSegue は機能しません。また、MasterViewController から performSegueWithIdentifier によって作成された detailViewController へのデータの受け渡し/アクセスに問題があります。

私の基本的なセットアップは、スレッドで説明されている内容に似ています: Storyboards および UISplitViewControllers。3 ページに、私のセットアップに非常によく似た絵コンテの画像があります (画像を投稿するのに十分な担当者がいません)。

手短に:

  1. 標準的な splitView 配置を作成します
  2. MasterViewController はメイン テーブルを構築します
  3. 各セルは、detailView の内容を決定する XML データを返す URL に対応します。
  4. フェッチされた XML は、NSXMLParser 操作/クラスを使用して解析されます
  5. フェッチされた XML は必要な詳細ビューを決定し、MasterViewController は適切な「置換」セグエを (performSegueWithIdentifier を介して) 呼び出して、対応する detailViewController を開始し、フェッチされた XML を表示します。

私が抱えている問題は、prepareForSegue が呼び出されていないため、取得した XML を detailViewController に渡すことができないことです。

私が必要とするのは、次のいずれかです。

  • 実行するprepareForSegue
  • handleLoadedResponse:notif 内の segue.destinationViewController を知る方法
  • detailViewControllers の viewDidLoad メソッド内から MasterViewController の「currentResponse」変数にアクセスする方法
  • StoryBoardID を介して MasterViewController を見つける方法

私が試したこと:

  • 各viewControllerのprepareForSegueにNSLog()ステートメントを入れる - それらのどれも呼び出されない
  • detailViewController の self.parentViewController チェーンを調べて、performSegueWithIdentifier を呼び出した MasterViewController を見つけます - 探しているクラス変数が見つかりません
  • 私が見つけることができるほとんどすべての「prepareForSegue not called」投稿を読んでください-それらはすべて、コード/ストーリーボードに表示されないコーディング/ストーリーボードエラーが原因のようです

問題は、私が電話していることでしょうか:

[self.navigationController performSegueWithIdentifier:@"theDesiredSegue" sender:self];

handleLoadedResponse:notif コールバック内から、アプリが解析オブジェクトで prepareForSegue を呼び出そうとしていますか?

ティア

レイ

4

1 に答える 1

2

まあ、これは、コードを長時間見つめていること、および/または初心者のせいだと考えてください。

明らかなことをすべてトリプルチェックした後、残っているのは NSXMLParser コールバック内でセグエ コードが正しく動作していないことだけだと思いました。アウト通知。

これらの変更をデバッグしているときに、セグエが間違ったオブジェクトに関連付けられていることに気付きました。それらは実際には、viewController ではなく、navigationController に接続されていました。視覚的には、RWForums の 3 ページにあるStoryboards と UISplitViewControllersのストーリー ボードのように見えましたが、実際にはそうではありませんでした。最終結果は、コードが performSegueWithIdentifier を呼び出していて、それが prepareForSegue メソッドを呼び出す必要があるように見えたにもかかわらず、実際には navigationController のセグエを呼び出していたため、navigationController の継承された prepareForSegue が呼び出されていました。

推奨事項: ドキュメント アウトラインを開いた状態で、ストーリーボード エディターですべての接続を再確認してください。

レイ

于 2013-01-03T11:24:34.827 に答える