将NSArrayController绑定到ManagedObjectContext会引发异常

时间:2018-09-04 04:48:30

标签: nsmanagedobjectcontext cocoa-bindings nsarraycontroller

我有一个正常运行的CoreDataManager类,该类的实例在我的AppDelegate中实例化(当应用程序完成加载时)。 CoreDataManager类具有“ mainContext”,而其又具有“ privateContext”作为其父级。我能够导入数据并将其存储在持久性存储中。

但是,当我调用数据窗口(由NSWindowController的子类控制)时,应用程序崩溃取决于我将数组控制器绑定到托管对象上下文的方式。我想到了在数组控制器的绑定设置下在XCode中进行绑定的四种方法:

  1. 使用“ mainContext”的模型键路径将NSArrayController的托管对象上下文绑定到AppDelegate(我的AppDelegate具有对数据管理器自己的mainContext的“便捷引用”,并且此引用存储为属性)

  2. 使用委托.coreDataManager.mainContext的模型键路径将NSArrayController的托管对象上下文绑定到NSApplication。 (避免使用便捷引用属性,而直接转到数据管理器的属性)

  3. 将NSArrayController的“托管对象上下文”绑定到存储在我的视图控制器中的mainContext副本(通过应用程序委托获取)。

  4. 将NSArrayController的托管对象上下文绑定到_cdm.mainContext,_cdm是对AppDelegate的coreDataManager属性的引用,该属性存储为视图控制器的属性。

只有最后一种方法成功。为什么????它们似乎都是获取上下文引用的合法方法,并且NSLog语句清楚地表明了它们的存在。根据使用哪种方法1-3,我会收到不同的崩溃消息。在一种情况下:

(MyWinControllerpersistentStoreCorrdinator :)无法识别的选择器已发送到实例...

在另一种情况下,(接着很多确认堆栈的存在),我得到...

代表为 2018-09-03 23:53:27.660555-0400 Sensei [2749:72364]在App Delegate中实例化管理器。 2018-09-03 23:53:27.660566-0400 Sensei [2749:72364]它已经存在。 2018-09-03 23:53:27.660585-0400 Sensei [2749:72364]现在可以访问经理: 2018-09-03 23:53:27.660609-0400 Sensei [2749:72364]并且也可以访问主要上下文 2018-09-03 23:53:27.660629-0400 Sensei [2749:72364]持久性存储协调器是 2018-09-03 23:53:35.306032-0400 Sensei [2749:72364] [常规]如果没有托管对象上下文,则无法执行操作 2018-09-03 23:53:35.310153-0400 Sensei [2749:72364] [常规](     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

我终于获得了相应的表格视图,并且可以正常工作,但是不了解问题几乎和不起作用一样糟糕。我很高兴能帮助您理解为什么Cocoa Bindings对如何将NSArrayController连接到Core Data的托管对象上下文如此气质,为什么其中一些绑定引用有效而另一些无效。预先感谢。

0 个答案:

没有答案