2011-11-22 72 views
3

我试图以编程方式设置NSArrayController以使用Core Data。如何设置核心数据的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; 
} 
+0

肯定你的管理对象上下文中初始化该代理在您将其分配给您的datacontroller init方法时。 –

+0

我从委托检查了托管对象上下文的调用,它不是零。还有其他建议吗? – David

+0

尝试[dataController fetch:self];安装后。不应该,但... –

回答

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

相关问题