如何使用 Core Data 设置 NSArrayController?

Posted

技术标签:

【中文标题】如何使用 Core Data 设置 NSArrayController?【英文标题】:How to setup NSArrayController with Core Data? 【发布时间】:2011-11-22 15:25:21 【问题描述】:

我正在尝试以编程方式设置 NSArrayController 以使用 Core Data。

我知道我的核心数据存储有内容,因为我可以通过托管对象上下文手动检索对象。我将NSArrayController 连接到同一个托管对象上下文,然后将NSTableColumn 的值参数绑定到NSArrayController

我让NSArrayController 获取,但它返回一个空数组。

关于我可能做错的任何建议?

界面

@interface MTTableViewController : NSObject <NSTableViewDelegate, NSTableViewDataSource>

    NSMutableArray *tableData;
    MTTableCell *tableCell;        

    IBOutlet NSTableColumn *tableColumn;        
    NSArrayController *dataController;

实施

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];

    if (self)
    
        dataController = [[NSArrayController alloc] init];
        [dataController setManagedObjectContext:[[NSApp delegate] managedObjectContext]];
        [dataController setEntityName:@"Track"];
        [dataController setAutomaticallyPreparesContent:YES];

        [dataController fetch:self];
        NSArray *content = [dataController arrangedObjects];        
        NSLog(@"Count :%i", (int)[content count]); //Outputs 0

        tableCell = [[MTTableCell alloc] initTextCell:@""];
        [tableColumn setDataCell:tableCell];
    

    return self;

【问题讨论】:

确保您的托管对象上下文在您将其分配给数据控制器初始化方法时已在委托中初始化。 我检查了委托对托管对象上下文的调用,它不是零。还有其他建议吗? 尝试 [dataController fetch:self];设置后。不应该但是... 我试过了,但我仍然得到零个对象。 SQLite 持久存储不为空。想法? 尝试使用指定的初始化器 initWithContent: with nil 【参考方案1】:

fetch: 不等待数据加载,而是立即返回。

这在启用绑定的环境中是有意义的。你通常有一个绑定到数组控制器的表格视图,它会随着控制器内容的变化而更新。

在这种情况下,您可以观察控制器的arrangedObjects 的变化:

[self.arrayController addObserver:self forKeyPath:@"arrangedObjects" options:NSKeyValueObservingOptionNew context:NULL];

然后:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context 
  NSLog(@"Data: %@", self.arrayController.arrangedObjects);

来源:https://***.com/a/13389460

【讨论】:

以上是关于如何使用 Core Data 设置 NSArrayController?的主要内容,如果未能解决你的问题,请参考以下文章

从内存的角度来看,具有非持久存储的 NSArray 和 Core Data 是如何工作的?

将 NSNumber* 的 NSArray 存储为 Core Data 中的 NSString

在 iOS 中对来自 Core Data 的实体的 NSArray 进行快速枚举时出现运行时错误

iOS NSArray, NSSet 与 Core Data Query (Fetch Request)

了解如何将 UISearchBar 与 Core Data 一起使用

哪一个更好?获取 NSArray 并在那里搜索,还是从 Core Data 一次获取一个对象?