如何使用Core Data设置NSArrayController?

时间:2011-11-22 15:25:22

标签: objective-c macos core-data nsarraycontroller

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

我知道我的Core Data存储有内容,因为我可以通过托管对象上下文手动检索对象。我将NSArrayController连接到同一个托管对象上下文,然后将NSTableColumn的value参数绑定到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;
}

1 个答案:

答案 0 :(得分:3)

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://stackoverflow.com/a/13389460