我正在尝试以编程方式设置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;
}
答案 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);
}