当我尝试这些不同的设置时,我在一个应用程序中有 2 个控制器。
一个是 UITableViewController,我理解的方式是委托和数据源是从超类中提取的。
现在按照这个理论,我现在还有一个 UIViewController,上面有一个 UITableView,在头文件中我已经声明了 Datasource 和 Delegate。
到目前为止,一切都很好:-)
现在这是我不明白的一点:
在实现文件中,我可以使用 tableView 指针链接数据,但我使用的是 Core Data,并且我有这段代码:
- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller
{
[self.tableView beginUpdates];
}
如果我没有设置
IBOutlet UITableView *tableView;
当然是合成的:-)
但是,如果我声明这个 tableView,我会收到一条警告,要求在一行上加倍:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
[self configureCell:cell atIndexPath:indexPath];
return cell;
}
因为它还声明了一个tableView。
所以我有两个问题:
1) 如果我设置了 UITableViewDatasource 和 Delegate,为什么还要设置 IBOutlet?
2)如果我给 UITableViewCell 一个不同的指针名称 - 比如 tableView2,为什么我在编辑数据时看不到更改,而只能在重新启动应用程序后看到结果?
MasterViewController,也就是 UITableViewController 没有这个选项。
干杯杰夫
---添加图像----
要进入编辑模式,我在 viewDidLoad 中有这段代码
self.navigationItem.leftBarButtonItem = self.editButtonItem;
我使用此代码来执行需要完成的操作:
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{ if (editingStyle == UITableViewCellEditingStyleDelete) { NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext]; [上下文删除对象:[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();
}
}
}
现在 + 选项有效,但我仅在重新启动应用程序后才能看到结果。我可以滑动和删除,但它不会在应用程序的同一个实例中实时动画。