我有一个反映NSOperation
状态的窗口。我应该如何将NSProgressIndicator
绑定到NSOperation
的进度属性?
答案 0 :(得分:7)
AppKit不是线程安全的。 UI对象的任何更新必须在主线程上发生。 KVO不会跨线程发送观察消息。因此,除了普通的KVO之外,您还需要另一种更新进度指示器的方法。
在NSOperation
的{{1}}方法中,您需要定期发送进度消息。最简单的方法是使用main
和自定义通知,以便主线程可以监听更新。 (请注意,通知始终在发送它们的线程上提供,因此您需要使用NSNotificationCenter
方法确保在UI线程上传递通知。)
在主线程中,您需要将您的类添加为观察者以接收这些通知并更新进度指示器。如果要对进度指示器使用绑定,可以将其绑定到控制器对象上的属性,当您从performSelectorOnMainThread:
收到进度通知时,该属性会更新。
答案 1 :(得分:0)