以编程方式检索NSArrayController的选定对象

Rog*_*ger 7 cocoa nsarraycontroller

当我使用NSArrayControllerwith实例时NSManagedObject,我的印象是以下内容会给我选择的对象:

[myArrayController selection]
Run Code Online (Sandbox Code Playgroud)

但是,这给了我一些私有NS Proxy类的实例.

我用的时候:

[[myArrayController selectedObjects] objectAt: 0]
Run Code Online (Sandbox Code Playgroud)

......一切都很好,我有我的实例NSManagedObject.

我理解这些方法的必要性,因为你可能有可以进行多项选择的列表.我不明白为什么selection不给我这个例子NSManagedObject.

jrt*_*ton 8

它在NSObjectController(NSArrayController继承自)的文档中声明此方法返回一个代理对象.

您将能够在代理对象上使用任何KVC方法,但如果您需要任何特定于类的功能,则必须使用上面示例中的第二种方法.正如您所说,这是在没有或多个选择的情况下返回有效对象.

  • 实际上,你也可以通过获取它的`self`值来绕过代理:`[[myArrayController selection] valueForKey:@"self"]`.请注意,您必须使用KVC执行此操作,调用`self`方法将返回代理. (13认同)