gpt4 book ai didi

cocoa - 使用 ArrayController 和 TableView 插入/修改 NSManagedObject

转载 作者:行者123 更新时间:2023-12-03 16:44:40 25 4
gpt4 key购买 nike

我的应用使用 Core Data 和一个简单模型,该模型包含两个实体“类别”和“项目”,两者都具有“名称”属性和一对多关系(一个类别有许多项目)。

在 IB 中,我有一个表格 View 和一个用于项目的数组 Controller 。还有一个文本字段和一个组合框(用于用户输入项目名称并选择类别)和“添加”按钮。

我想要的是添加一个新项目并使用用户的项目名称和类别选择对其进行修改。

我已经尝试过这个:

- (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]; 我无法访问新项目来修改它。

有什么解决办法吗?提前致谢。

最佳答案

问题是阵列 Controller 没有时间根据您的 MOC 更改获取其新内容。这通常发生在未来(可能是下一次)运行循环中,作为观察 MOC 变化的结果。

如果您想在数组 Controller 的选择中使用新插入的对象,则必须强制数组 Controller 刷新其内容。为此,只需向数组 Controller 发送 -fetch: 完成操作后,新插入的对象就会出现。然后您可以直接修改阵列 Controller 的选择。

关于cocoa - 使用 ArrayController 和 TableView 插入/修改 NSManagedObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3923339/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com