0

誰かが私にこれを説明できるかどうか疑問に思っていました。ストーリーボードを使用してユニバーサル アプリを構築しています。iPhone バージョンには、マスター リスト ビューとサブリスト ビューを備えたナビゲーション コントローラーがあります (どちらもテーブル ビュー コントローラーです。

iPad アプリは分割ビュー コントローラーを使用して、iPhone と同じことを実現します (マスター リストと詳細リスト)。すべて問題ありませんが、「置換」セグエを使用して分割ビュー コントローラーの新しい詳細ビューに移行する場合、新しい詳細ビューを独自のナビゲーション コントローラー内に埋め込む必要がありますが、iPhone ではこれを行う必要はありません。 (すでにナビゲーション コントローラー内にあります。(うまくいけば、これは何らかの意味を持ちます)

私のコード(動作する)は次のようになります。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    NotesListViewController *listNotesView;
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
        listNotesView = [[segue destinationViewController] topViewController];
    } else {
        listNotesView = [segue destinationViewController];
    }

    if ([segue.identifier isEqualToString:@"NotesByDate"]) {
        [listNotesView setGroupType:@"date"];
    } else if ([segue.identifier isEqualToString:@"NotesByTopic"]) {
        [listNotesView setGroupType:@"topics"];
    } else if ([segue.identifier isEqualToString:@"NotesBySpeaker"]) {
        [listNotesView setGroupType:@"speaker"];
    }

だから...問題は、IFステートメントの最初の条件が警告を生成していることです(UIViewControllerからNoteListViewControllerに割り当てられている互換性のないポインタータイプ)。ただし、これは UIViewController ではなく、UITableViewController です。iPhoneバージョンではUIViewになりますが、ここでは特にiPadをチェックしています。

私が言ったように、それは機能するので、これは実際には問題ではないかもしれませんが、警告が常に表示され、どのように/修正できるかがわからないことに少しイライラしています.

ストーリーボードの画像を少し投稿してみます。うまくいけば、これを説明するのに役立ちます.

4

1 に答える 1

1

[[segue destinationViewController] topViewController]取得したUIViewController を に型キャストするだけですNotesListViewController。 余談

ですが、コードが機能するのに警告が生成される理由は、オブジェクトを呼び出すタイプに関係なく、メモリ内で指されている実際のタイプが重要であるためです(何かを an として宣言し、割り当てることができますとの記憶ですが、それは混乱につながるだけです)。オブジェクトを返すのは、行のどこかで、それが返すクラスはあなたのようにから継承するためですが、それよりも具体的にするのに十分な情報がないため、型キャストすることによってコンパイラに追加情報を与える必要があります物体。listNotesView = (NotesListViewController *)[[segue destinationViewController] topViewController];

NSString[NSDictionary alloc]-topViewControllerUIViewControllerUIViewControllerNotesListViewController

于 2012-12-24T18:17:22.320 に答える