Программное добавление к объекту Core Data (например, привязка IB 'add') - PullRequest
1 голос
/ 21 февраля 2011

У меня есть базовая модель данных с сущностью, называемой клиенты , которая состоит из следующих атрибутов:

client model entity

Если я нажимаю на ' добавить клиентскую кнопку 'и вызвать следующее окно:

client window

Какой будет правильный метод для программного добавления новой записи для каждого свойства одновременно (вПо аналогии с тем, как связанная кнопка «Добавить» будет работать с NSArrayController), и они будут отображаться в текстовых полях окна « add client » для редактирования?Текстовые поля в окне ' add client ' привязаны к соответствующим свойствам (при этом одно или два по-прежнему отсутствуют) объекта client .Код, который у меня есть на данный момент:

- (IBAction)addNewClient:(id)sender;
{
    [addClientsWindow makeKeyAndOrderFront:self];
    //NSManagedObjectContext *clientsMoc= [clientsController managedObjectContext];
    //[clientsMoc addObject:[clientsMoc newObject]];
    [clientsController addObject:[clientsController newObject]];
}

, который работал для других объектов в этом проекте, но не работает для клиента , так как я добавил типы отношений (он выдает ошибки KVCв консоли).Я предполагаю, что это потому, что я обращаюсь к NSArrayController, а не NSManagedObjectContext, но закомментированный код не работает для меня.Эта попытка вытекает из предыдущего вопроса , так как вопрос сильно изменился, и я изо всех сил пытаюсь выполнить данный совет.Мне действительно нужна хорошая отправная точка, и документы Apple Dev не помогают мне понять это.

Заранее спасибо!

---- Обновление ----

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

- (IBAction)addNewClient:(id)sender;
{
    [addClientsWindow makeKeyAndOrderFront:self];
    NSManagedObjectContext *clientsMoc= [clientsController managedObjectContext];
    NSManagedObject *clientsEntity = [NSEntityDescription
                                     insertNewObjectForEntityForName:@"Clients" 
                                       inManagedObjectContext:clientsMoc];
    [clientsEntity setValue:@"name" forKey:@"clientName"];
    [clientsEntity setValue:@"company" forKey:@"clientCompany"];
    [clientsEntity setValue:@"address" forKey:@"clientAddress"];
    [clientsEntity setValue:@"11111111" forKey:@"clientLandline"];
    [clientsEntity setValue:@"email@gmail.com" forKey:@"clientEmail"];
}

Это создало новую запись для объекта клиентов - я не понимал, что мне нужно будет указывать индивидуальные значения для каждого свойства.Однако ошибки KVC продолжались, и я никак не мог найти решение.Документы для разработчиков Apple были действительно полезны в этом, здесь , и добавление NSBindingDebugLogLevel 1 в список «Аргументы, которые будут переданы при запуске» дало мне детали того, что именно вызвало проблему.Это была старая привязка к NSTableColumn, которая не была обновлена.

1 Ответ

3 голосов
/ 21 февраля 2011

Это может быть решение, которое я искал:

- (IBAction)addNewClient:(id)sender;
{
    [addClientsWindow makeKeyAndOrderFront:self];
    NSManagedObjectContext *clientsMoc= [clientsController managedObjectContext];
    NSManagedObject *clientsEntity = [NSEntityDescription
                                     insertNewObjectForEntityForName:@"Clients" 
                                       inManagedObjectContext:clientsMoc];
    [clientsEntity setValue:@"name" forKey:@"clientName"];
    [clientsEntity setValue:@"company" forKey:@"clientCompany"];
    [clientsEntity setValue:@"address" forKey:@"clientAddress"];
    [clientsEntity setValue:@"11111111" forKey:@"clientLandline"];
    [clientsEntity setValue:@"email@gmail.com" forKey:@"clientEmail"];
}

Это создало совершенно новую запись для объекта клиентов - я не осознавал, что мне придется делать индивидуальные значения для каждого свойства. Однако ошибки KVC продолжались, и я никак не мог найти решение. Документы для разработчиков Apple были действительно полезны в этом, здесь , и добавление NSBindingDebugLogLevel 1 в список «Аргументы, которые будут переданы при запуске» дало мне детали того, что именно вызвало проблему. Это была старая привязка к NSTableColumn, которая не была обновлена.

...