相关疑难解决方法(0)

你能手动实现Cocoa绑定吗?

我在实现自己的NSView子类的绑定方面遇到了麻烦.它工作正常,但是当从nib文件绑定到File的Owner时,保留周期存在问题.在阅读了一下之后,我发现Apple在几年前遇到了同样的问题,但已经修复了一些魔法未记录的类(NSAutounbinder).

这里有关于保留周期问题的冗长讨论http://www.cocoabuilder.com/archive/message/cocoa/2004/6/12/109600.解决方法是在释放窗口控制器之前取消绑定所有绑定,而不是在取消分配窗口控制器之前,在windowWillClose:之类的位置解除绑定.这似乎是对我不必要的黑客攻击.

我的问题是:有没有办法让自定义绑定与Apple制作的绑定一样好,而不使用未记录的功能?我是以错误的方式来做这件事的吗?


更新2:我找到了一个解决方案,允许手动实现的绑定与Apple的绑定完全一样.它利用了未记录的NSAutounbinder类,而没有实际使用未记录的功能.我将在今天晚些时候发布解决方案.


更新:我尝试过使用exposeBinding:,似乎没有任何区别.但是,NSObject执行bind:toObject:withKeyPath:options:半部作品.它传播从bindee到binder的变化(即从模型/控制器到视图),但不会以相反的方式工作.此外,虽然明显地观察到了这个垃圾箱,但是observeValueForKeyPath:ofObject:change:context:从未触发过.

示例项目:http://www.tomdalling.com/wp-content/BindingsTest.zip

Apple的文档表明,事实上,您必须覆盖bind:toObject:withKeyPath:options:以实现手动绑定.请看:http://developer.apple.com/documentation/Cocoa/Conceptual/CocoaBindings/Concepts/HowDoBindingsWork.html


侧面注意:我已经调查了未记录的NSAutounbinder如何工作,这就是我所知道的.

当为NSWindowController创建绑定时,绑定对象实际上是一个NSAutounbinder,它是从NSWindowController获取的 - [NSWindowController _autounbinder].NSAutounbinder是NSWindowController对象的非保留代理.避免保留循环问题是不保留的.

当调用 - [NSWindowController release]并且retainCount == 1时,NSAutounbinder会解除对所有绑定的绑定.这可确保在取消分配对象之前没有悬挂指针.

cocoa objective-c cocoa-bindings

36
推荐指数
1
解决办法
9340
查看次数

如何使用Xcode 4绑定到Cocoa中的自定义视图?

在编写Mac应用程序和使用Cocoa时,我是初学者,所以请原谅我的无知.

我正在寻找创建一个自定义视图,它暴露了一些属性,然后我可以绑定到NSObjectController.由于它是一个自定义视图,Bindings Inspector显然没有列出我添加到视图中的任何属性,然后我可以使用Interface Builder绑定到这些属性.

在转向Stackoverflow/Google寻求帮助之后,我偶然发现了几个可能的解决方案,但似乎两者都不适合我的情况.第一个建议创建一个IBPlugin,这意味着我的绑定将在Bindings Inspector中提供.然后,我可以使用IB将视图绑定到控制器.显然,Xcode 4不支持IBPlugins,所以一个人不在窗外.我也假设(可能是错误地)不再支持IBPlugins,因为这些天有更好的方法来做这些事情?

第二个选项是以编程方式将控制器绑定到视图.我对如何实现这一点感到有点困惑.是否需要子类化NSObjectController,以便我可以添加绑定到视图的调用?我是否需要在视图中添加任何内容以支持此操作?我见过的一些例子说你需要覆盖bind方法,而其他人则说你没有.

另外,我注意到[self exposeBinding:@"bindingName"]初始化程序中有一些示例自定义视图调用.根据我从各种来源收集的内容,这与IBPlugins有关,如果我不使用它,我不需要这样做.那是对的吗?

我在这里找到了一篇关于Stackoverflow的帖子,似乎讨论了与我的问题非常相似的内容,但对于最佳答案没有任何明确的赢家.noa在9月12日的最后评论似乎很有趣,尽管他们提到你应该打电话exposeBinding:.这条评论是否正确?是否真的需要对exposeBinding进行调用?

为任何愚蠢的问题道歉.任何帮助非常感谢.

cocoa objective-c cocoa-bindings xcode4

14
推荐指数
2
解决办法
3929
查看次数

标签 统计

cocoa ×2

cocoa-bindings ×2

objective-c ×2

xcode4 ×1