0

デフォルトのセルを表示するUITableViewControllerがあります。各セルにタッチして、最初のビューの各セルが保持する「アカウント」内のリストに移動できます。

私はすべてをセグエに接続し、最初のビューで次のように呼びます。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"showDetail"]) {
        NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
        Account *nextAccount = [self.list objectAtIndex:indexPath.row];
        DetailViewController *viewController = (DetailViewController *)[segue destinationViewController];
        viewController.account = nextAccount;
    } 
}

次に、詳細ビューのviewDidAppear:(BOOL)animatedで次のように言います。

 - (void)viewDidAppear:(BOOL)animated {
self.list = [self.account.list mutableCopy];
}

次に、詳細ビューにUITableViewControllerがありますが、cellForRowAtIndexPath:メソッドでself.listにアクセスしますが、機能していないようです。私は自分のcellForRowAtIndexPath:が機能することを知っています。これは、以前にメソッドでいくつかのテンプレート作業を行ったため、正常に機能したためです。これは、prepareForSegue:が機能していないか、プロパティが設定されていないだけのようです。

前もって感謝します!

4

2 に答える 2

0

おそらく、viewDidAppear が呼び出されるずっと前に、詳細テーブル ビューを設定しようとしています。代わりに、データ モデルのセッターをオーバーライドしてみてください。

-(void)setList:(List*)list    // or whatever type list is
{
    if (_list != list) {
        _list = [list mutableCopy];
    }
}

次に、ビューが読み込まれる前にコピーを作成する必要があります。

また、viewDidAppear をオーバーライドする場合は、必ずスーパーを呼び出してください。

[super viewDidAppear];
于 2012-06-28T20:05:36.530 に答える
0

NSLog を使用して、各要素が != nil かどうかを確認します。(nextAccount など) Objective C では、エラー メッセージをスローすることなく、nil オブジェクトにメッセージを送信できます。

また、セグエ条件文にログ文を入れて、それが呼び出されるようにします。

于 2012-06-28T19:21:24.807 に答える