3

私は 2 日間その問題について頭を悩ませてきましたが、なぜそのような動作が起こっているのか本当にわかりません...これは本当に気分が悪くなり始めています!

インターフェイスビルダーで構築されたストーリーボードを使用する iOS アプリがあります。開始ビューは、2 つのタブを所有する TabBarVC です。

タブ 1: ナビゲーション コントローラー -> TableView Controller1 -> TableView Controller2

タブ 2 : Collection View Controller -> Navigation Controller -> TableView Controller3 -> TableView Controller2 (はい、そう書くつもりでした)

TableView Controller 1 と 3 のそれぞれで、動的にプロトタイプ化されたセル (スタイル = 右詳細、アクセサリ = 開示インジケータ) を使用します。最初のものでは、再利用識別子を設定しました。たとえば、TableView1Cell としましょう。テーブルビューの実装では、次のコードを使用して cell を返します。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"TableView1Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    SFBottles *bottleAtIndex = [self.dataController getCellarBottleAtIndex:indexPath.row];
    [cell.textLabel setText:bottleAtIndex.houseName];
    [cell.detailTextLabel setText:bottleAtIndex.productName];

    return cell;
}

...そして、次のコードを使用して TableView Controller2 にセグエします:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"ShowBottleDetails"])
    {
        CellarDetailViewController *detailVC = [segue destinationViewController];
        detailVC.bottle = [self.dataController getCellarBottleAtIndex:[self.tableView indexPathForSelectedRow].row];
    }
}

上記のすべてが期待どおりに機能します。私は TableView Controller3 でまったく同じことをします:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"TableView3Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    SFBottles *bottleAtIndex = [self.bottlesArray objectAtIndex:indexPath.row];
    [cell.textLabel setText:bottleAtIndex.houseName];
    [cell.detailTextLabel setText:bottleAtIndex.productName];

    return cell;
}

...そして、このView Controllerが実行時にロードされると、次のエラーが発生します:

捕捉されなかった例外 'NSInternalInconsistencyException' が原因でアプリを終了しています。

ただし、この行を TableView Controller3 の viewDidLoad に追加することで、このエラーをクリアできました。

[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"TableView3Cell"];

しかし、そうすると、表示されたセルに右側のサブタイトルも開示インジケーターも表示されません。

さらに、コードは TableView Controller1 の実装と同じですが、セルを選択してもセグエがトリガーされません。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"OverviewListToBottleDetails"])
    {
        CellarDetailViewController *detailVC = [segue destinationViewController];
        detailVC.bottle = [self.bottlesArray objectAtIndex:[self.tableView indexPathForSelectedRow].row];
        detailVC.navigationItem.rightBarButtonItem = nil;
    }
}

では、同じセルを使用し、同じ方法で同じコントローラーにセグする 2 つの似たような TableView コントローラーがまったく同じように動作しないのはなぜでしょうか?

私はこれが多くの情報であることを知っています.質問をしてください.できるだけ早く答えます.

ありがとう!

4

0 に答える 0