2011-11-22 47 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

相關問題