2017-02-03 2 views
0

У меня есть два класса A и B с отношением 1: n от A до n B. В A есть атрибут отношений bs (не упорядочен), а в B есть атрибут отношения.Не удалось вызвать назначенный инициализатор в классе NSManagedObject, вызвав добавление NSArrayController

A и B фактически являются NSManagedObject, автоматически генерируемыми из модели Core Data проекта.

В NSViewController у меня есть ArrayController и NSTableView с ячейкой, через которые мне нужно показать и управлять b.

ArrayController имеет:

  1. Режим: Класс
  2. Имя Класс: B
  3. Содержимое набора связаны с a.bs

Каждый столбец таблицы связывается с контроллером массива orderedObjects.b_attribute

В таблице показаны как ожидалось, так и я могу их редактировать.

Проблемы возникают при попытке добавить новый b.

Контроллер имеет кнопку, и ее действие привязано к Array Controller add: method.

К сожалению, когда я нажимаю кнопку, я получаю следующее сообщение об ошибке:

error: CoreData: error: Failed to call designated initializer 
on NSManagedObject class 'B' 

CoreData: error: CoreData: error: Failed to call designated 
initializer on NSManagedObject class 'B' 

Копает StackOverflow Я обнаружил, что проблема может быть связана с созданием управляемых объектов с помощью:

... = [[B alloc] init]; 

вместо от

... = [NSEntityDescription insertNewObjectForEntityForName:@"B" inManagedObjectContext:_managedObjectContext]; 

Поскольку я не создаю явно объекты b, nk это так, но я не могу понять, что я делаю неправильно.

Заранее благодарю за предоставленную помощь.

ответ

0

Установите ArrayController:

Режим: Наименование организации

Entity Название: B

Готовит Содержание: ДА

+0

К сожалению, это не решит проблему. Tks, во всяком случае. – Fab

+0

По-прежнему такая же ошибка? – Willeke

+0

Точно такое же – Fab

0

Я сортирую этот вопрос следующим образом:

  1. ArrayController связан с кодом как bsController
  2. кнопка запускает метод для добавления нового B:

    • (IBAction) NEWB: (NSButton *) отправитель {

    B * B = [NSEntityDescription insertNewObjectForEntityForName: @ "B" inManagedObjectContext : _managedObjectContext];

    [_bsController addObject: b];

Он работает, правильно создавая пустую строку в таблице.

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

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