NSArrayController 返回 null

Posted

技术标签:

【中文标题】NSArrayController 返回 null【英文标题】:NSArrayController returns null 【发布时间】:2014-02-04 22:18:21 【问题描述】:

我的应用程序中有一个 NSArrayController 绑定到 CoreData。它还绑定到一个显示数据的 TableView。 ArrayController 上绑定了两个按钮,用于添加和删除行。所有这些都按预期工作。我可以添加、编辑、保存和删除 CoreData 条目。

我的应用程序中有一个部分是接受来自文件的拖放操作(工作)。它从文件中获取数据,查找各种信息,然后通过 NSArray 控制器将这些信息插入到 Core Data 数据库中。

我已将处理文件解析/添加到数据库的类作为 IB 中的对象添加。我为类中的数组控制器创建了一个 IBOutlet,并将控制器绑定到类的引用出口。

如果我在界面上添加一个按钮,直接调用向数据库添加自定义记录的方法,一切正常。如果通过拖放操作调用该方法,则没有任何效果,即使记录一个简单的 [arrayController className] 也会返回 null(尽管从按钮单击调用该方法时会按预期返回 NSArrayController)。

我能看到的唯一区别是,当通过按钮单击访问时,直接调用该方法,而另一种方式在加载解析类之前通过我的拖放类,但我完全卡在如何补救这种情况。我很乐意提供代码,只是不确定您需要哪个代码。

感谢任何帮助。谢谢!

===================

更新 事实证明,我将 IBOutlet 连接到 IB 中的类(视图的子类)对象,而不是连接到处理 drop 的视图本身。将这些连接起来使事情奏效。好吧,不行,我现在还有其他问题要解决,但是 Array 控制器现在已实例化。

【问题讨论】:

【参考方案1】:

从评论移到答案:您尝试添加内容的数组控制器未实例化。我假设你指的不是你原来的 NSArrayControllerinstance 而是一个新创建的?可能是您的类实例之间的通信问题。

【讨论】:

是的,我想的是未实例化。我只是不确定为什么。正如我上面所说,当我直接通过 UI 访问类中的方法时,实例化有效,因此将属性绑定到 NSArrayController 是正确的。但是,拖放操作在被传送到处理插入的那个之前会经过一个不同的类。人力资源管理系统。我有一个想法,我去试试看。 这可能是我最终找到的最接近的答案。我有一个子类视图以添加拖放功能。子类本身作为对象添加到 IB 中,我所有的绑定都是到该类而不是视图本身。一旦我绑定到视图本身,数组控制器突然不再为空。【参考方案2】:

调试这应该很简单......使用调试器。设置几个断点(在按钮调用的每个操作处设置一个断点,在您的类实例要相互通信的每个点设置一个断点(您的导入器和您的主控制器))。当调试器在每个断点处中断时,运行、测试、单步执行代码。

我的猜测:在 IB 中未连接(为零)插座或在运行时尚未重新连接(请参阅-awakeFromNib 并确保您没有尝试触摸尚未完全完成的插座或操作在您尝试使用时在运行时从笔尖重新连接)。

【讨论】:

【参考方案3】:

有些东西没有正确连接,但无论如何你都不想这样做。通过 NSArrayController 插入没有任何优势。只需使用NSEntityDescriptions 创建新对象:

+ (id)insertNewObjectForEntityForName:(NSString *)entityName inManagedObjectContext:(NSManagedObjectContext *)context;

你就完成了。如果您的 NSArrayController 连接正确,它将在事件结束时自动获取新对象,以便用户“立即”看到它们。

【讨论】:

"通过 NSArrayController 插入没有任何优势。" ——当然有。如果您使用 add/insert 方法并且selectsInsertedObjectsYES,则插入/添加的对象将在插入后自动选择(非常常见的用例)。否则,您必须等待更改显示在当前上下文中或强制更新阵列控制器,找到它并自己选择它。 好的,很好,有这个优势,但另一方面是如果你通过 ArrayController 插入,如果你想修改它们,你必须手动查找刚刚插入的对象,这是你最常做的.所以我的意思是,我的方式将是更少的代码。此外,OP 没有说他想要选择这些项目。

以上是关于NSArrayController 返回 null的主要内容,如果未能解决你的问题,请参考以下文章

两个 NSArrayController 和一个关系(CoreData)

NSArrayController 的奇怪行为

NSTableView 绑定到 NSArrayController

为啥 NSArrayController 在插入对象后“失去”排序?

过滤 NSArrayController 的问题

NSArrayController 子类添加 Core Data 对象需要啥?