0

私はstackoverflowとGoogleのいたるところにいて、これを理解できないようです。これが私のシナリオです:

私のアプリの「メイン画面」では、ユーザーが最初に何をするかを決定します。このアプリは、XMLファイルを「インポート」することで作成されたCoreDataデータベースで動作します。ユーザーは、アプリケーションで電子メールに添付されたXMLファイルを開くことを選択できます。これにより、メイン画面が自動的にトリガーされ、ファイルのインポートが表示されて実行されます。

私は問題なくここまで到達することができます。ストーリーボードには、メイン画面からビューコントローラーへのParseSegueというセグエがあります。このセグエは、解析を処理し、ユーザーにステータス情報を提供します。

メールアプリでメイン画面を呼び出すと、メイン画面で自動的に

[self performSegueWithIdentifier:@"ParseSegue" sender:self];

次に、prepareForSegueでこのセグエ名を確認します。これは有効な名前です。ここで、ファイルURLをパーサーコントローラーに割り当てて、正しいファイルを解析できるようにします。

問題は、セグエが実際には起こらないということです。prepareForSegueメソッドが呼び出され、「ParseSegue」という名前をチェックして有効にできますが、セグエ自体は発生しません。メイン画面にボタンを追加して、ストーリーボード内でセグエを実行するように指示すると、正常に機能します。しかし、プログラムで呼び出すと何も起こらないようです。

4

1 に答える 1

0

私は完全に間違った場所を探していたことがわかりました。私の問題は、アプリが着信URLに反応するappDelegateで、ストーリーボードとメインビューコントローラーの新しいインスタンスを誤って作成していたことでした。これは、すでにアクティブになっているものとは異なり、画面に表示されている場合とされていない場合があります。

私が作成していたコントローラーは実際には表示されませんでした。ログが次の理由でこれに気づいただけです:

NSLog(@"Source: %@", [segue.sourceViewController description]);

私のテスト(ボタンを押す)とインポートテストで異なるメモリアドレスが表示されます。これにより、実際には、ストーリーボードの2つの異なるインスタンスとアプリのメインビューコントローラーを操作していると思いました。宛先とソースコントローラーのログ記録を提案してくれたPaulに感謝します。

于 2012-06-18T15:42:50.770 に答える