如何将NSProgressIndicator绑定到NSOperation的属性?

Geo*_*lly 4 concurrency cocoa key-value-observing nsoperation

我有一个窗口,反映了一个状态NSOperation.我应该如何绑定NSProgressIndicatorNSOperation进度属性?

Ale*_*lex 7

AppKit不是线程安全的.对UI对象的任何更新都必须在主线程上进行.KVO不会跨线程发送观察消息.所以你需要和另一种更新进度指示器的方法不仅仅是简单的KVO.

在你NSOperationmain方法中,你需要定期发送进度消息.最简单的方法是使用NSNotificationCenter自定义通知,以便主线程可以监听更新.(请注意,通知始终在发送它们的线程上传递,因此您需要使用该performSelectorOnMainThread:方法确保在UI线程上传递通知.)

在主线程中,您需要将您的类添加为观察者以接收这些通知并更新进度指示器.如果要对进度指示器使用绑定,可以将其绑定到控制器对象上的属性,当您从中接收进度通知时,该属性会更新NSOperation.