我有一个反射(reflect) NSOperation
状态的窗口。我应该如何将 NSProgressIndicator
绑定(bind)到 NSOperation
的进度属性?
最佳答案
AppKit 不是线程安全的。对 UI 对象的任何更新必须发生在主线程上。 KVO 不会跨线程调度观察消息。因此,您需要另一种更新进度指示器的方法,而不仅仅是简单的 KVO。
在 NSOperation
的 main
方法中,您需要定期发送进度消息。最简单的方法是将 NSNotificationCenter 与自定义通知一起使用,以便主线程可以监听更新。 (请注意,通知始终在发送通知的线程上传递,因此您需要使用 performSelectorOnMainThread:
方法来确保通知在 UI 线程上传递。)
在主线程中,您需要将类添加为观察者以接收这些通知并更新进度指示器。如果您想使用进度指示器的绑定(bind),您可以将其绑定(bind)到 Controller 对象上的一个属性,当您从 NSOperation
收到进度通知时,您会更新该属性。
关于cocoa - 如何将 NSProgressIndicator 绑定(bind)到 NSOperation 的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1395081/