これらのさまざまな設定を試しているので、1つのアプリ内に2つのコントローラーがあります。
1つはUITableViewControllerで、私が理解しているように、デリゲートとデータソースはスーパークラスから取得されます。
その理論に従って、UITableViewを含むUIViewControllerもあり、ヘッダーファイルでデータソースとデリゲートを宣言しました。
ここまでは順調ですね:-)
今、これは私が得られないビットです:
実装ファイルでは、tableViewポインターを使用してデータをリンクできますが、Core Dataを使用しており、特に次のコードがあります。
- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller
{
[self.tableView beginUpdates];
}
これと他の5つの状況では、セットアップしないとUIViewControllerでエラーが発生します。
IBOutlet UITableView *tableView;
もちろんそれは合成されます:-)
しかし、このtableViewを宣言すると、次のような行にダブルアップの警告が表示されます。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
[self configureCell:cell atIndexPath:indexPath];
return cell;
}
これは、tableViewも宣言しているためです。
だから私は2つの質問があります:
1)UITableViewDatasourceとDelegateを設定したのに、なぜIBOutletを設定する必要があるのですか?
2)UITableViewCellに別のポインター名(tableView2など)を付けた場合、データの編集時に変更を表示できず、アプリを再起動した後にのみ結果を表示できるのはなぜですか?
UITableViewControllerであるMasterViewControllerには、このオプションがありません。
乾杯ジェフ
---画像の追加----
編集モードに入るには、viewDidLoadにこのコードがあります
self.navigationItem.leftBarButtonItem = self.editButtonItem;
そして、私はこのコードを使用して、実行する必要があることを実行します。
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{if(editingStyle == UITableViewCellEditingStyleDelete){NSManagedObjectContext * context = [self.fetchedResultsController managedObjectContext]; [context deleteObject:[self.fetchedResultsController objectAtIndexPath:indexPath]];
NSError *error = nil;
if (![context save:&error]) {
// Replace this implementation with code to handle the error appropriately.
// abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
}
}
+オプションが機能するようになりましたが、アプリを再起動した後にのみ結果が表示されます。スワイプして削除することはできますが、アプリの同じインスタンス内でライブアニメーションを実行することはできません。