UITableViewController/UITableView と Core Data を使用する iPhone アプリを実装しました。さらに、NSFetchedResultsController を使用してテーブル データを管理します。これはすべて非常に簡単で、うまく機能します。次に、行が見つからない/取得されない場合に UITableView にメッセージを表示する必要があると判断しました。これを調査した後、これを行う最善の方法 (おそらく唯一の方法) は、メッセージを含む「ダミー」セルを返すことであることがわかりました。ただし、これを行うと、データの不整合について不平を言うランタイム システムから、「無効な更新: セクションの数が無効です。テーブル ビューに含まれるセクションの数 ...」という厄介なメッセージが表示されます。関連するコードは次のとおりです。
- (NSInteger) numberOfSectionsInTableView: (UITableView *)tableView
{
if ([[self.fetchedResultsController fetchedObjects] count] == 0) return 1;
return [[self.fetchedResultsController sections] count];
}
- (NSInteger) tableView: (UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if ([[self.fetchedResultsController fetchedObjects] count] == 0) return 1;
id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController sections] objectAtIndex: section];
return [sectionInfo numberOfObjects];
}
- (UITableViewCell *) tableView: (UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath
{
if ([[self.fetchedResultsController fetchedObjects] count] == 0) {
UITableViewCell *cell = [[UITableViewCell alloc] init];
cell.textLabel.text = @"No widgets found.";
return cell;
}
STCellView *cell = (STCellView *)[tableView dequeueReusableCellWithIdentifier: @"ShieldCell"];
[self configureCell: cell atIndexPath: indexPath];
return cell;
}
同様の質問からの回答を読みましたが、使用する必要があるようです
insertRowsAtIndexPaths: withRowAnimation:
「ダミー」メッセージ行をテーブルに挿入します。ただし、これは、実際の行が挿入されたときに「ダミー」行を削除することも意味します。私はこれを行うことができますが、これを達成するためのより簡単な方法があるはずです。私がやりたいことは、テーブルに行がないことを示すメッセージを表示することだけです (簡単ですか?)。したがって、私の質問は次のとおりです。「ダミー」セルアプローチを使用せずに UITableView にメッセージを表示する方法はありますか、または UITableViewController/NSFetchResulsController にこれが「ダミー」行にすぎず、取得してはならないことを納得させる方法はありますかテーブルの実際の行ではないので(私の観点から)、それについてとても怒っていますか?
あなたが提供できる助けは非常に高く評価されます (私は iPhone 開発に苦労している初心者であり、ベストプラクティスを学びたいと思っています)。ありがとう。