0

ストーリーボードを使用して、行のリストを備えたテーブルビューコントローラーがあります。行が選択されたら、その行に関連付けられているデータを、UINavigationController内に埋め込まれている別のテーブルビューコントローラーに渡します。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    if ([segue.identifier isEqualToString:@"EditJob"])
    {
        NewJobsTableViewController *newJobsTableViewController = segue.destinationViewController;
        NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];

        Jobs *job = [self.fetchedResultsController objectAtIndexPath:indexPath];
        newJobsTableViewController.jobDetails = job;

    }
}

prepareForSegueメソッドの最後の行で、次のエラーが発生します:
[UINavigationController setJobDetails:]:認識されないセレクターがインスタンス0x83a7780に送信されました2012-11-11 08:50:25.335 My Trades [40612:c07] *キャッチされなかったためにアプリを終了します例外'NSInvalidArgumentException'、理由:'-[UINavigationController setJobDetails:]:認識されないセレクターがインスタンス0x83a7780に送信されました'

jobDetailsは、newJobsTableViewControllerで次のように宣言されています。

@interface NewJobsTableViewController : UITableViewController <UITextFieldDelegate,      NSFetchedResultsControllerDelegate> {
    Jobs *_jobDetails;
}

@property (strong, nonatomic) Jobs *jobDetails;

なぜこのエラーが発生するのかわかりません。

4

1 に答える 1

1

ストーリーボードの設定が間違っているように思えます。その 2 番目の tableViewController は、独自のナビゲーション コントローラーに埋め込まれるべきではありません。最初の tableViewController から 2 番目の tableViewController へのプッシュ セグエをセットアップするだけです。2 番目は、最初の tableViewController と同じナビゲーション コントローラーに自動的に埋め込まれます。

エラーの理由は、目的のView Controllerが、実際には2番目のView Controllerを埋め込んだNavigation Controllerであるためだと思います。この行は、期待どおりに機能しません。

 NewJobsTableViewController *newJobsTableViewController = segue.destinationViewController;

クラスにdestinationViewControllerの戻り値を設定していても、実際には何でも返されます.newJobsTableViewControllerのクラスをログに記録すると、実際にはUINavigationControllerとして返されると思います.

于 2012-11-10T22:42:16.617 に答える