Основные данные программно добавление отношения ко многим - PullRequest
0 голосов
/ 09 февраля 2012

У меня есть сущность Item и тип сущности (который имеет атрибут «Имя») в отношении ко многим с Item.(То есть: Элемент: Коричневый стол, относится к типу с именем «Журнальный столик»).

Я программно добавил новые элементы в порядке, например,

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

Iискал несколько часов, но не могу найти то, что мне подходит, добавляя отношения к новому предмету.Я использую 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]];

Но тогда у меня нет возможности для selectedType добавить что-то вроде «addObject» ..

Любая помощь приветствуется, спасибо.

1 Ответ

0 голосов
/ 11 февраля 2012

Вот что я в итоге использовал:

 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];

По сути, объект должен быть выбран, чтобы можно было установить связь между двумя элементами, а предикат основан на typePopUpButtontitleOfSelectedItem метод.

Я гарантирую выбрать только один объект с помощью метода [objectAtIndex:0].

Это вызывает предупреждение: NSManagedObject may not respond to 'addItemsObject'.

Однако это работает для меня.

...