我的应用程序中有一个绑定到CoreData的NSArrayController。它还绑定到显示数据的TableView。两个按钮绑定到ArrayController,用于添加和删除行。所有这一切都按预期工作。我可以添加,编辑,保存和删除CoreData条目。
我的应用程序的一部分是接受文件中的拖放操作(工作)。它从文件中获取数据,查找各种信息,并通过NSArray控制器将此信息插入到Core Data数据库中。
我已经将处理文件解析/添加的类作为IB中的对象添加到数据库中。我为类中的数组控制器创建了一个IBOutlet,并将控制器绑定到类'引用插座。
如果我在界面上添加一个按钮来直接调用将自定义记录添加到数据库的方法,那么一切正常。如果通过拖放操作调用该方法,则无效,即使记录一个简单的[arrayController className]也会返回null(尽管从按钮单击调用该方法时会按预期返回NSArrayController)。
我能看到的唯一区别是,当通过按钮单击访问时,该方法被直接调用,而另一种方式在加载解析类之前通过我的拖放类,但我完全停留在如何纠正这种情况。我很乐意提供代码,只是不确定您需要哪些代码。
感谢任何帮助。谢谢!
==================
UPDATE 结果我将IBOutlet连接到IB中的一个类(视图的子类)对象,而不是处理drop的视图本身。连接这些使得工作成功。好吧,不行,我现在还有其他问题要解决,但现在实例化了Array控制器。
答案 0 :(得分:1)
从评论转到回答:您尝试添加内容的数组控制器未实例化。我假设你不是指你原来的NSArrayController实例,但可能是一个新创建的?可能是类实例之间的通信问题。
答案 1 :(得分:0)
调试这个应该很简单......使用调试器。设置一些断点(按钮调用的每个操作一个断点,以及您的类实例要相互通信的每个点一个(您的导入器和主控制器))。当调试器在每个断点处断开时,运行,测试,逐步执行代码。
我的猜测:IB中的插座没有连接(是零)或者在运行时尚未重新连接(请参阅-awakeFromNib
并确保您没有尝试触摸未插入的插座或操作在您尝试使用它时,在运行时完全从笔尖重新连接。)
答案 2 :(得分:-1)
有些东西没有正确连接,但你不想这样做。通过NSArrayController插入没有任何好处。只需使用NSEntityDescription
s创建新对象:
+ (id)insertNewObjectForEntityForName:(NSString *)entityName inManagedObjectContext:(NSManagedObjectContext *)context;
你已经完成了。如果您的NSArrayController
被正确连接,它将在事件结束时自动获取新对象,以便用户“立即”看到它们。