0

こんにちは私は現在、テーブルビューを詳細ビューにプッシュするためにselectをプッシュしました。選択したテーブルセルの名前を送信するための次のコードもあります。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *acell = [tableView cellForRowAtIndexPath:indexPath];
    selectedCell = acell.textLabel.text;

    DetailViewController *myDetViewCont = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:[NSBundle mainBundle]];

    myDetViewCont.navigationItem.title = selectedCell;
    [self.navigationController pushViewController:myDetViewCont animated:YES];

}

正常にビルドされますが、シミュレーターではエラーがスローされます。

@autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
Thread: 1 signal: SIGABRT

私は同様の問題を調べましたが、解決策を見つけられませんでした。ヘルプはありますか?

エラーに関する追加情報:

[self.navigationController pushViewController:myDetViewCont animated:YES];
4

2 に答える 2

1

ストーリーボードを使用している場合、次の行は意味がありません。

DetailViewController *myDetViewCont = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:[NSBundle mainBundle]];

プロジェクトで呼び出されたNIBファイルがありDetailViewController.xibますか?おそらくそうではありません。したがって、例外myDetViewContnil発生します。そのNIBを持っている場合、プッシュセグエはどのようになりますか(ストーリーボードからNIBにセグエできないため)?

NIBではなくストーリーボードを本当に使用したいと仮定して、コントローラー間にすでにプッシュセグエがある場合は、そのセグエに識別子を指定します(これは、Interface Builderで行います。以下のコードではyouridentifier、のプレースホルダーとして使用します。指定したものは何でも、正しい識別子に置き換えます)、次に、セグエを使用して移行する必要があります。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *acell = [tableView cellForRowAtIndexPath:indexPath];
    [self performSegueWithIdentifier:@"youridentifier" sender:acell];
}

新しいコントローラーにデータを送信する場合は、次のように使用prepareForSegueします。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"youridentifier"])
    {
        if ([sender isKindOfClass:[UITableViewCell class]])
        {
            UITableViewCell *selectedCell = sender;
            UIViewController *myDetViewCont = segue.destinationViewController;
            myDetViewCont.navigationItem.title = selectedCell.textLabel.text;
        }
        else
        {
            NSLog("%s Was expecting sender to be a tableviewcell", __FUNCTION__);
        }
    }
}
于 2012-08-14T16:31:58.300 に答える
0

これに対する解決策を見つけました。ストーリーボードにUINavigationControllerが必要です。これを行うには、最初のシーンを取得し、それをクリックしてxcodeの上部にあるタブに移動し、[エディター]>[埋め込み]>[ナビゲーションコントローラー]を実行し、ボタンをオンにしてナビゲーションコントローラーを初期シーンとして設定します。次のコードを追加して、上部のナビゲーションバーを非表示にします。

self.navigationController.navigationBar.hidden = YES;
self.navigationController.navigationBar.translucent = NO;
于 2015-01-30T00:23:38.820 に答える