2010-10-13 53 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