2009-05-27 4 views
0

***** EDIT ***** Что я не уверен в том, как получить доступ к сущности из модели в коде и как получить доступ к определенному экземпляру объекта в этом коде. Это суммирует основные проблемы, которые у меня возникают.Добавить в arrayController, изменить атрибут Core Data

***** END EDIT *****

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

 NSString *filename = [files objectAtIndex:i]; 
     MySchoolPlanner_AppDelegate *myAppDelegate = [[MySchoolPlanner_AppDelegate init] alloc]; 
     [NSEntityDescription insertNewObjectForEntityForName:@"Attachment" 
             inManagedObjectContext:[myAppDelegate managedObjectContext]]; 
     [myAppDelegate release]; 

По какой-то причине, вид таблицы, связанный с контроллером Attachment массива не добавляет никаких. Кроме того, я не уверен, как получить доступ к приложению, которое я только что создал, чтобы использовать KVC.

ответ

2

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

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

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

+0

Спасибо за помощь, но я все еще немного смущен. См. Мое редактирование. Спасибо! – Walker

+1

Ну, в вашем коде вы создаете совершенно новый контроллер приложения, либо с помощью второго контекста MO, либо с нуля, и затем уничтожаете его. Это немного назад, поскольку у вас уже есть существующий контекст. Если бы я был на вашем месте, я бы наложил Core Data на удержание, пока у вас не было возможности ознакомиться с каркасом Cocoa и шаблонами дизайна, которые он использует. Основные данные упрощают работу в некоторых отношениях, но не предназначены для замены основ. –

+0

Я знаю, что, наверное, у меня над головой, но я создаю приложение на базе Core Data, хотя большинство данных Core Data делаются в IB. Я планирую подробно ознакомиться с Core Data в ближайшем будущем, но я бы хотел, чтобы этот вопрос был решен прямо сейчас. Спасибо за вашу помощь. Я думаю, что я не уверен в том, как получить доступ к сущности из модели в коде и как получить доступ к конкретному экземпляру объекта в этом коде. – Walker

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