У меня есть проблема, чтобы вставитьNewObject в сущность, являющуюся дочерней в отношениях родитель / потомок. Это приложение CoreData с локальной базой SQLite. В главном окне представлены 2 объекта с двумя табличными представлениями. При использовании contentSet в таблице для дочернего элемента будут отображаться только данные, относящиеся к выбранному родительскому элементу.
Добавление данных к дочернему элементу выполняется путем показа листа с таблицей элементов, поступающих от третьего объекта. Пользователь должен выбрать из этой таблицы, затем нажать Добавить. При закрытии листа дочерняя таблица в главном окне должна быть обновлена новой строкой. Проблема: ничего не появляется.
Проверяя содержимое базы данных с помощью стороннего приложения, я вижу, что новые данные есть, но они не отображаются в табличном представлении, поскольку не было сохранено никакой информации об отношениях с родителем, поэтому он не знает, к какому родителю это относится.
В моем коде отсутствует информация об этом, но я просто не понимаю, как мне это запрограммировать. Другими словами: при отклонении листа укажите, какой родитель выбран, и укажите эту информацию об отношениях при вставке новых данных в дочерний элемент. Буду признателен за любую помощь.
Вот мой код:
// there are 3 entities: Collectors (parent), CollectedItems (child) and Items.
// we call the sheet presenting the Items list to pick from
- (IBAction)showAddItemDialog:(id)sender {
[NSApp beginSheet:addItemDialog
modalForWindow:window
modalDelegate:self
didEndSelector:@selector(didEndAddItemSheet:returnCode:contextInfo:)
contextInfo:nil];
}
// we dismiss the sheet by clicking on Cancel or Add
- (IBAction)dismissAddItemDialog:(id)sender {
[NSApp endSheet:addItemDialog returnCode:([sender tag])];
[addItemDialog orderOut:sender];
}
// depending on clicked button, do nothing or pass selected data
- (void)didEndAddItemSheet:(NSWindow *)sheet returnCode:(int)returnCode contextInfo (void *)contextInfo {
if (returnCode == 0) {
// do nothing, this is the effect of clicking on Cancel
}
if (returnCode == 1) {
NSString *theName = [[[itemsPickerController selectedObjects] valueForKey:@"itemName"] objectAtIndex:0];
// above, we get the value from the itemName attribute sleected in the Items list
NSLog (@"%@", theName);
// the variable is displayed in the console, so it was correctly selected
[self addNewItemWithName:theName];
}
}
// we use the passed data to create new object (row) in the CollectedItems entity
- (id)addNewItemWithName:(NSString *)theName {
NSEntityDescription *newContent = [NSEntityDescription insertNewObjectForEntityForName:@"CollectedItems" inManagedObjectContext:[self managedObjectContext]];
[newContent setValue:theName forKey:@"collectedItemName"];
// above, we insert a new row in CollectedItems, assigning the value theName to the attribute collectedItemName
return nil;
}