核心数据以编程方式添加多对多关系

时间:2012-02-09 15:26:21

标签: objective-c xcode core-data nsmanagedobject nspopupbutton

我有一个实体Item,以及与Item有多对多关系的实体Type(具有属性“Name”)。 (即:项目:棕色表,与名称为“咖啡桌”的类型相关)。

我已经以编程方式添加了新的项目,例如:

[newItem setValue:([nameTextField stringValue]) forKey:@"Name"];
[newItem setValue:(costNumber) forKey:@"Cost"];
[newItem setValue:(priceNumber) forKey:@"Price"];

我一直在寻找几个小时,但找不到适合我添加新项目关系的东西。我正在使用NSPopUpButton来选择项目的类型,并尝试过像selectedItem,selectedTag和selectedCell这样的方法。我正在尝试从“typeArray”中获取值,其填充方式如下:

NSFetchRequest *fetchRequest2 = [[NSFetchRequest alloc] init];
NSEntityDescription *entity2 = [NSEntityDescription entityForName:@"Type"
                                           inManagedObjectContext:managedObjectContext];
[fetchRequest2 setEntity:entity2];
NSError *error = nil;
typeArray = [managedObjectContext executeFetchRequest:fetchRequest2 error:&error];
if (typeArray == nil) {
    NSLog(@"ERROR");
}
[fetchRequest2 release];

我不确定以下内容是否正确:

NSManagedObject *selectedType = [typeArray objectAtIndex:[typePopUpButton selectedTag]];

但是我没有选择selectType来添加类似“addObject”的东西..

感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:0)

这是我最终使用的:

 NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Type"
                                          inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
NSError *error = nil;
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"Name like %@", [typePopUpButton titleOfSelectedItem]];
[fetchRequest setPredicate:predicate];
NSArray *typeSet = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
if (typeSet == nil) {
    NSLog(@"ERROR");
}
[fetchRequest release];


NSManagedObject *typeObject = [typeSet objectAtIndex:0];
[typeObject addItemsObject:newItem];

基本上,需要获取对象,以便可以在两个项之间建立关系,并且谓词基于typePopUpButton的{​​{1}}方法。

我确保只使用方法titleOfSelectedItem选择一个对象。

但确实会出现警告:[objectAtIndex:0]

然而,这对我有用。