将UITableViewCell与核心数据同步

时间:2011-03-29 20:37:46

标签: iphone core-data uitableview

我有一些与Core Data一起存储的对象。例如,人。我将这些人与我的webservice(XML)同步,并使用NSFetchedResultsController在UITableView中显示人员。

一切正常,我的同步方法在后台线程中运行(同步方法只在viewDidLoad中调用一次)。

现在我想在UITableViewCell中显示一个UISwitch。此开关应更改person对象中的bool值。此外,我需要显示一个带有一些图标的小工具栏。如果person是x,则显示y图标,如果person是a,则显示b图标...

有没有人有任何好的想法或例子来实现这个?

我的第一个方法: 使用方法+ UISwitch作为子视图中的子视图对Core Data对象进行子类化和设置...我还需要实现layoutSubviews方法。

我不想构建.nib文件!我需要在其他单元格中重用单元格的所有部分......

但我不确定这是不是最好的方式......

1 个答案:

答案 0 :(得分:0)

您好 我不是这样的。提取结果控制器必须为你做这项工作。 只需将你的BOOL核心数据状态连接到你的uiswitch,并做出类似的事情:

- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath {

    UITableView *tableView = self.tableView;
    [tableView beginUpdates];


    switch(type) {
        case NSFetchedResultsChangeInsert:
        {
            NSIndexPath *newIndex = [NSIndexPath indexPathForRow:newIndexPath.row inSection:2];

            [tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndex] withRowAnimation:UITableViewRowAnimationFade];
            break;
        }
        case NSFetchedResultsChangeDelete:
        {
            NSIndexPath *newIndex = [NSIndexPath indexPathForRow:indexPath.row inSection:2];

            [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:newIndex] withRowAnimation:UITableViewRowAnimationFade];
            break;
        }
        case NSFetchedResultsChangeUpdate:
        {
            NSIndexPath *newIndex = [NSIndexPath indexPathForRow:indexPath.row inSection:2];

            [self configureCell:(CompanyAndUserInfoCell *)[tableView cellForRowAtIndexPath:newIndex] atIndexPath:newIndex forTableView:tableView];
            break;
        }
        case NSFetchedResultsChangeMove:
        {
            NSIndexPath *newIndexStart = [NSIndexPath indexPathForRow:indexPath.row inSection:2];
            NSIndexPath *newIndexStop = [NSIndexPath indexPathForRow:newIndexPath.row inSection:2];

            [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:newIndexStart] withRowAnimation:UITableViewRowAnimationFade];
            [tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexStop] withRowAnimation:UITableViewRowAnimationFade];
            break;
        }
    }
    [tableView endUpdates];


}