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