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];
我不能訪問新的項目來修改它。
任何解決方案?提前致謝。
你的意思是像[itemsArrayController add:nil]; [itemArrayController fetch:nil]; newItem = [[itemsArrayController selecteObjects] objectAtIndex:0];現在修改新項目? – Azpiri 2010-10-13 15:40:50
不,您通過創建它並將其插入MOC來添加對象,完全繞過添加階段的陣列控制器。按照上面的方式添加它,*然後*獲取並選擇。調用-add:會插入一個「空白」(就像它在初始化和從插入中醒來時)並選擇它。既然你在創建時做了一些自定義的事情,那麼-add:方法對你來說就沒用了。 – 2010-10-13 15:56:38
好的。我測試了這個[itemAC setSelectedObjects:[NSArray arrayWithObject:newItem]];並且工作正常(有或沒有-fetch :)!再次感謝您的幫助約書亞 – Azpiri 2010-10-13 16:09:09