-1

写真を表示する必要があるコントローラービューにセグエするテーブルビューでストーリーボードを使用してみます。問題は、「セル」を押すとアプリがクラッシュすることです。

これは問題のコードです:

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

    if([[segue identifier] isEqualToString:@"ShowPhoto"])
    {
        DetailsViewController *dvc = [segue 
        destinationViewController];
        NSIndexPath *path = [[self tableView] indexPathsForSelectedRows];
        Photo *pic = [photosArray objectAtIndex:[path row]];

        [dvc setCureentPic: pic];
    }
}

問題は NSIndexPath の行です...その理由は、配列を NSIndex に挿入しようとしたためだと思います。xcode 警告: 'NSArray 型の式で 'NSIndexPath *__strong' を初期化する互換性のないポインター型。

クラッシュ メッセージ: 認識されないセレクターがインスタンス [__NSArrayI 行] に送信されました。どうすれば問題を解決できますか?

4

1 に答える 1

6

メソッドが何をするかについて仮定するのではなく、呼び出すメソッドのドキュメント( here )を読んでください...

[[self tableView] indexPathsForSelectedRows]

は anではなくanNSArrayを返します(ちなみに、ドキュメントを読まなくてもこれを知ることができます。Cocoa の命名規則では、何かが複数形の場合、 を受け入れるか返す)、そのため、 のメッセージを送信するとクラッシュします。書くNSIndexPathNSArrayNSIndexPath

NSIndexPath *path = [[[self tableView] indexPathsForSelectedRows] objectAtIndex:0];

代わりに、それは機能します(選択された行が少なくとも1つある場合-そうでない場合は、配列が空であることを確認する必要があります。そうでない場合、再びクラッシュします...)

ちなみに、コンパイラは何が問題なのかについても警告します...プログラミングを試みる前に、ある程度の常識を身につけてください。

于 2012-11-01T07:13:27.233 に答える