Mac OS X替代NSFetchedResultsController

lbr*_*dnr 8 cocoa core-data nstableview appkit nsarraycontroller

所以我习惯了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);
Run Code Online (Sandbox Code Playgroud)

然后我听取NSManagedObjectContext的更改并获取并重新加载NSTableView,如下所示:

        [self.conversationsController fetchWithRequest:nil merge:YES error:&error];
    NSAssert(!error, error.description);

    [self.tableView reloadData];
Run Code Online (Sandbox Code Playgroud)

正如我之前提到的,我可能使用这个完全错误,但我不喜欢使用绑定.现在来看实际问题:应用程序的另一个类可能会删除NSArrayController持有的NSManagedObject.NSArrayController立即释放这个删除的对象,使我无法确定哪个对象.最终目标是知道什么索引被删除了哪个对象,这样我就可以为NSTableView的行设置动画.

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

Dai*_*jan 3

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

但 NSArrayController 是一个势均力敌的匹配!它还获取 CoreData 实体并对其进行排序。

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


例如参见:

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

  • 请注意,您不必使用绑定!NSArrayController 当然可以直接使用 (2认同)