Mac OS X替代NSFetchedResultsController

时间:2014-01-19 10:33:42

标签: cocoa core-data nstableview nsarraycontroller appkit

所以我习惯了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的行设置动画。

我希望我的目标很明确。 谢谢你的帮助

1 个答案:

答案 0 :(得分:3)

NSTableView中没有任何部分,因此没有1:1替换

但NSArrayController非常接近!它还提取和排序CoreData实体。

对于UI,您可以使用绑定(当然,您不必使用)


e.g。见:

http://cocoadevcentral.com/articles/000080.php