Привязка NSArrayController к ManagedObjectContext вызывает исключения - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть работающий класс CoreDataManager, экземпляр которого создается в моем AppDelegate (когда приложение заканчивает загрузку). Класс CoreDataManager имеет «mainContext», который в свою очередь имеет «privateContext» в качестве родителя. Я могу импортировать данные и хранить их в постоянном хранилище.

Однако, когда я вызываю окно данных (управляемое подклассом NSWindowController), приложение падает, в зависимости от того, как я связываю контроллер массива с контекстом моего управляемого объекта. Я подумал о четырех способах связывания в XCode в настройках привязок контроллера массива:

  1. Привязать контекст управляемого объекта NSArrayController к AppDelegate с помощью ключевого пути модели «mainContext» (мой AppDelegate имеет «вспомогательную ссылку» на собственный mainContext менеджера данных, и эта ссылка хранится как свойство)

  2. Свяжите контекст управляемого объекта NSArrayController с NSApplication с помощью ключевого пути модели Delegate.coreDataManager.mainContext. (избегая удобного ссылочного свойства и переходя прямо к свойству менеджера данных)

  3. Привязать контекст управляемого объекта NSArrayController к копии mainContext, хранящейся в моем контроллере представления (полученной через делегат приложения).

  4. Привязать контекст управляемого объекта NSArrayController к _cdm.mainContext, _cdm - это ссылка на свойство coreDataManager AppDelegate, хранящееся как свойство контроллера представления.

Только последний подход успешен. ЗАЧЕМ???? Все они кажутся законными подходами к получению ссылки на контекст, и заявления NSLog ясно показывают, что они существуют. В зависимости от того, какой подход я использую 1 - 3, я получаю разные сообщения о сбоях. В одном случае:

(MyWinController persistentStoreCorrdinator :) нераспознанный селектор отправлен в экземпляр ...

В другом случае (после лотов для подтверждения существования стека) я получаю ...

Делегат 2018-09-03 23: 53: 27.660555-0400 Сенсей [2749: 72364] Инстанцирующий менеджер в App Delegate. 2018-09-03 23: 53: 27.660566-0400 Сенсей [2749: 72364] Он уже существовал. 2018-09-03 23: 53: 27.660585-0400 Сенсей [2749: 72364] Теперь есть доступ к менеджеру: 2018-09-03 23: 53: 27.660609-0400 Сенсей [2749: 72364] А также иметь доступ к основному контексту 2018-09-03 23: 53: 27.660629-0400 Сенсей [2749: 72364] Постоянный координатор магазина 2018-09-03 23: 53: 35.306032-0400 Сенсей [2749: 72364] [General] Невозможно выполнить операцию без контекста управляемого объекта 2018-09-03 23: 53: 35.310153-0400 Сэнсэй [2749: 72364] [General] ( 0 CoreFoundation 0x00007fff9589d57b __exceptionPreprocess + 171 1 libobjc.A.dylib 0x00007fffaab051da objc_exception_throw + 48 2 CoreFoundation 0x00007fff9591ac55 + [Повышение NSException: формат:] + 197 3 AppKit 0x00007fff939aeb44 - [_ NSManagedProxy _managedObjectContext] + 66 4 AppKit 0x00007fff939aeb64 - [_ NSManagedProxy _persistentStoreCoordinator] + 22 5 AppKit 0x00007fff939aebd7 - [_ NSManagedProxy _entity] + 46 6 AppKit 0x00007fff939aee90 - [_ NSManagedProxy fetchRequestWithSortDescriptors: limit:] + 89

Я наконец-то подключил соответствующее табличное представление, и оно работает, но непонимание проблемы почти так же плохо, как не заставить его работать. Я был бы признателен за понимание того, почему привязки Какао так темпераментны в том, как вы соединяете NSArrayController с контекстом управляемого объекта Core Data, и почему некоторые из этих ссылок привязки работают, а другие - нет. Заранее спасибо.

...