***** РЕДАКТИРОВАТЬ *****
В чем я не уверен, так это как получить доступ к сущности из модели в коде и как получить доступ к конкретному экземпляру сущности в этом коде. Это подводит итог основных проблем, с которыми я сталкиваюсь.
***** Конец редактирования *****
У меня есть таблица с кнопкой для добавления в нее. При нажатии кнопки пользователю предоставляется открытое диалоговое окно, в котором он выбирает файл (ы). Новый объект добавлен в контроллер массива. Что я не знаю, как это сделать, так это отредактировать основные атрибуты данных для этого нового объекта. Есть два атрибута, имя файла и путь, и я не уверен, как их редактировать. Если вы посмотрите на нижнюю часть функции openPanelDidEnd: returnCode: contextInfo: вы увидите, что я пытаюсь выполнить.
- (IBAction)addAttachment:(id)sender
{
panel = [NSOpenPanel openPanel];
[panel beginSheetForDirectory:nil
file:nil
modalForWindow:[NSApp mainWindow]
modalDelegate:self
didEndSelector:@selector(openPanelDidEnd:
returnCode:
contextInfo:)
contextInfo:NULL];
}
- (void)openPanelDidEnd:(NSOpenPanel *)openPanel
returnCode:(int)returnCode
contextInfo:(void *)x
{
if (returnCode == NSOKButton)
{
NSArray *files = [openPanel filenames];
int i;
for (i = 0; i < [files count]; i++)
{
NSString *file = [files objectAtIndex:i];
[attachmentController add:x];
// How do I add filenames here?
// I'm assuming it involves KVC like
// [something setValue:@"file" forKey:@"filename"];
// But I don't know hot to get the something
// i.e. since I have multiple attachments,
// how do I get the one I just created
}
}
}
*********** РЕДАКТИРОВАТЬ **************
Упрощенно, моя модель имеет 2 объекта: приложение и элемент. Предмет имеет отношение ко многим с привязанностью, поскольку у каждого предмета может быть много вложений.
Мой openPanelDidEnd: returnCode: contextInfo: метод теперь выглядит следующим образом:
NSString *filename = [files objectAtIndex:i];
MySchoolPlanner_AppDelegate *myAppDelegate = [[MySchoolPlanner_AppDelegate init] alloc];
[NSEntityDescription insertNewObjectForEntityForName:@"Attachment"
inManagedObjectContext:[myAppDelegate managedObjectContext]];
[myAppDelegate release];
По какой-то причине табличное представление, привязанное к контроллеру массива Attachment, не добавляет ничего. Кроме того, я не уверен, как получить доступ к вложению, которое я только что создал, чтобы использовать на нем KVC.