Добавить в arrayController, отредактировать атрибут Core Data - PullRequest
0 голосов
/ 28 мая 2009

***** РЕДАКТИРОВАТЬ ***** В чем я не уверен, так это как получить доступ к сущности из модели в коде и как получить доступ к конкретному экземпляру сущности в этом коде. Это подводит итог основных проблем, с которыми я сталкиваюсь.

***** Конец редактирования *****

У меня есть таблица с кнопкой для добавления в нее. При нажатии кнопки пользователю предоставляется открытое диалоговое окно, в котором он выбирает файл (ы). Новый объект добавлен в контроллер массива. Что я не знаю, как это сделать, так это отредактировать основные атрибуты данных для этого нового объекта. Есть два атрибута, имя файла и путь, и я не уверен, как их редактировать. Если вы посмотрите на нижнюю часть функции 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.

1 Ответ

2 голосов
/ 28 мая 2009

Метод NSArray add: - это то, к чему вы можете подключить кнопку, когда у вас есть объект Core Data, который можно создавать и использовать без какой-либо инициализации. В этом случае просто вызовите NSEntityDescription's

+ (id)insertNewObjectForEntityForName:(NSString *)entityName inManagedObjectContext:(NSManagedObjectContext *)context

с контекстом управляемого объекта, который вы используете с вашим контроллером массива, и соответствующим именем объекта для создания вашего управляемого объекта в коде. Вы можете установить свойства для него напрямую, если вы создали подкласс для своей сущности, или просто использовать кодирование значения ключа, если вы еще этого не сделали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...