我想UITableViewCell
根据文档目录中是否存在文件来更改 a 。我觉得这应该是基于通知的,并且应该在对象isAvailable
属性发生更改时发送通知。
我不想意外造成线程问题。由于我在主线程上操作我的核心数据对象,是否可以在我的 Concrete 类上设置自定义设置器以发布通知?
最好的方法是什么?我应该创建自己的通知,还是应该挂钩核心数据已经发布的内容?
我想UITableViewCell
根据文档目录中是否存在文件来更改 a 。我觉得这应该是基于通知的,并且应该在对象isAvailable
属性发生更改时发送通知。
我不想意外造成线程问题。由于我在主线程上操作我的核心数据对象,是否可以在我的 Concrete 类上设置自定义设置器以发布通知?
最好的方法是什么?我应该创建自己的通知,还是应该挂钩核心数据已经发布的内容?
如果您使用NSFetchedResultsController
. 此类可以与 a 结合使用,UITableView
以减少内存开销并提高响应时间。
你可以在NSFetchedResultsController Class Reference和NSFetchedResultsControllerDelegate Protocol Reference找到文档。
此外,您可以为NSFetchedResultsController
. 实现NSFetchedResultsController
委托方法,它允许您侦听数据(NSManagedObjectContext
您注册的数据)中的添加、删除、移动或更新等操作,因此也可以在您的表中侦听。
关于该主题的一个非常好的教程是core-data-tutorial-how-to-use-nsfetchedresultscontroller。在这里,您可以找到设置 a UITableView
、 aNSFetchedResultsController
及其委托的所有元素。
这么说,关于您的问题,您可以使用此技术来更改(特定的)属性更改UITableViewCell
时的内容。特别是,您应该实现以下委托方法以响应特定更改(请参阅注释)。isAvailable
NSManagedObject
- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath {
UITableView *tableView = self.tableView;
switch(type) {
case NSFetchedResultsChangeInsert:
[tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationFade];
break;
case NSFetchedResultsChangeDelete:
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
break;
case NSFetchedResultsChangeUpdate: // <---- here you will change the content of the cell based on isAvailable property
[self configureCell:[tableView cellForRowAtIndexPath:indexPath] atIndexPath:indexPath];
break;
case NSFetchedResultsChangeMove:
[tableView deleteRowsAtIndexPaths:[NSArray
arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
[tableView insertRowsAtIndexPaths:[NSArray
arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationFade];
break;
}
}
希望能帮助到你。