Программное добавление в сущность Core Data (например, привязка IB 'add')

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

модель клиента

Если я нажму кнопку "Добавить клиента" и открою следующее окно:

окно клиента

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

- (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 Dev были действительно полезны в этом, здесь, и добавление NSBindingDebugLogLevel 1 в списке "Аргументы, подлежащие передаче при запуске" я подробно описал причину проблемы. Это была старая привязка к NSTableColumn это не было обновлено.

1 ответ

Решение

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

- (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 Dev были действительно полезны в этом, здесь, и добавление NSBindingDebugLogLevel 1 в списке "Аргументы, подлежащие передаче при запуске" я подробно описал причину проблемы. Это была старая привязка к NSTableColumn это не было обновлено.

Другие вопросы по тегам