私は 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 コントローラーがまったく同じように動作しないのはなぜでしょうか?
私はこれが多くの情報であることを知っています.質問をしてください.できるだけ早く答えます.
ありがとう!