所以我习惯了iOS开发,所以我对NSFetchedResultsController非常满意。但是,这在Mac OS X环境中不存在。我知道我可以使用NSArrayController作为替代品。我可能会使用这个类非常错误,但它一直有效。 我按如下方式初始化NSArrayController:
NSArrayController* newConversationsController = [NSArrayController new];
newConversationsController.managedObjectContext = context;
newConversationsController.entityName = entityName;
newConversationsController.sortDescriptors = sortDescriptors;
newConversationsController.automaticallyRearrangesObjects = YES;
NSError* error = nil;
[newConversationsController fetchWithRequest:nil merge:NO error:&error];
NSCAssert(!error, error.description);
然后我听取NSManagedObjectContext的更改,并按如下方式获取并重新加载NSTableView:
[self.conversationsController fetchWithRequest:nil merge:YES error:&error];
NSAssert(!error, error.description);
[self.tableView reloadData];
正如我之前提到的,我可能使用这个完全错误,但我不喜欢使用绑定。 现在来看实际问题:应用程序的另一个类可能会删除NSArrayController持有的NSManagedObject。 NSArrayController立即释放这个删除的对象,使我无法确定哪个对象。最终目标是知道什么索引被删除了哪个对象,这样我就可以为NSTableView的行设置动画。
我希望我的目标很明确。 谢谢你的帮助
答案 0 :(得分:3)
NSTableView中没有任何部分,因此没有1:1替换
但NSArrayController非常接近!它还提取和排序CoreData实体。
对于UI,您可以使用绑定(当然,您不必使用)
e.g。见: