2010-10-13 51 views
2

我的應用程序使用Core Data和一個帶有兩個實體'Category'和'Item'的簡單模型,它們都具有'name'屬性和一對多關係(一個類別有許多項目)。使用ArrayController和TableView插入/修改NSManagedObject

在IB我有一個tableview和一個數組控制器的項目。另外一個文本框和一個組合框(用於用戶類型的項目名稱和選擇一個類別)和「添加」按鈕。

我想要的是添加一個新項目,並用用戶的項目名稱和類別選擇進行修改。

我已經試過這樣:

- (IBAction)add:sender 
{ 
    NSManagedObjectContext *moc = [self managedObjectContext]; 
    NSEntityDescription *itemEntityDescription = [NSEntityDescription entityForName:@"Item" inManagedObjectContext:moc]; 

    NSManagedObject *newItem = [[NSManagedObject alloc] initWithEntity: itemEntityDescription insertIntoManagedObjectContext:moc]; 

    //Modify attribute 
    [newItem setValue:[textField stringValue] forKey:@"name"]; 

    //Setup category relacionship from user selection on comboBox 
    NSEntityDescription *categoryEntity = [NSEntityDescription entityForName:@"Category" inManagedObjectContext:moc]; 
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(name LIKE[c] %@)",[comboBox objectValueOfSelectedItem]]; 

    NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease]; 
    [request setEntity:categoryEntity]; 
    [request setPredicate:predicate]; 

    NSError *error = nil; 
    NSArray *array = [moc executeFetchRequest:request error:&error]; 

    [newItem setValue:[array objectAtIndex:0] forKey:@"category"]; 
} 

的問題是,新項目不TableView中選擇。如果我使用而不是[itemsArrayController add:nil];我不能訪問新的項目來修改它。

任何解決方案?提前致謝。

回答

1

問題是陣列控制器沒有時間根據您的MOC更改獲取其新內容。這通常發生在將來(可能是非常接下來的)通過運行循環的行程中,作爲觀察MOC進行更改的結果。

如果您想在數組控制器的選擇中使用新插入的對象,則必須強制數組控制器刷新其內容。要做到這一點,只需發送數組控制器a -fetch:在完成操作之後,應該存在新插入的對象。然後您可以直接修改陣列控制器的選擇。

+0

你的意思是像[itemsArrayController add:nil]; [itemArrayController fetch:nil]; newItem = [[itemsArrayController selecteObjects] objectAtIndex:0];現在修改新項目? – Azpiri 2010-10-13 15:40:50

+0

不,您通過創建它並將其插入MOC來添加對象,完全繞過添加階段的陣列控制器。按照上面的方式添加它,*然後*獲取並選擇。調用-add:會插入一個「空白」(就像它在初始化和從插入中醒來時)並選擇它。既然你在創建時做了一些自定義的事情,那麼-add:方法對你來說就沒用了。 – 2010-10-13 15:56:38

+0

好的。我測試了這個[itemAC setSelectedObjects:[NSArray arrayWithObject:newItem]];並且工作正常(有或沒有-fetch :)!再次感謝您的幫助約書亞 – Azpiri 2010-10-13 16:09:09