0

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

Я программно добавлены новые товары в порядке, используя, например:

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

Но тогда я не имеют опции для selectedType, чтобы добавить что-то вроде «addObject».

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

+0

Я пытаюсь использовать http://lethain.com/one-to-many-relationships-in-coredata/, но не могу применить его к моей ситуации с помощью всплывающей кнопки. – Rail24

+0

Вы не упомянули в своем вопросе, если бы вы пробовали [newItem mutableSetValueForKey: @ "Type"] - NSMutableSet, из которого вы получите, должно получить сообщение addObject:. –

+0

Я пробовал 'NSMutableSet * mutableSet = [newItem mutableSetValueForKey: @" Type "]; [mutableSet addObject: newItem]; ', который привел к этой ошибке:' - [__ NSCFSet entity]: непризнанный селектор, отправленный экземпляру 0x102819c90 ' – Rail24

ответ

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 «s titleOfSelectedItem метод.

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

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

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

Смежные вопросы