我有一些与Core Data一起存储的对象。例如,人。我将这些人与我的webservice(XML)同步,并使用NSFetchedResultsController在UITableView中显示人员。
一切正常,我的同步方法在后台线程中运行(同步方法只在viewDidLoad中调用一次)。
现在我想在UITableViewCell中显示一个UISwitch。此开关应更改person对象中的bool值。此外,我需要显示一个带有一些图标的小工具栏。如果person是x,则显示y图标,如果person是a,则显示b图标...
有没有人有任何好的想法或例子来实现这个?
我的第一个方法: 使用方法+ UISwitch作为子视图中的子视图对Core Data对象进行子类化和设置...我还需要实现layoutSubviews方法。
我不想构建.nib文件!我需要在其他单元格中重用单元格的所有部分......
但我不确定这是不是最好的方式......
答案 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];
}