cocoa - 如何将 NSProgressIndicator 绑定(bind)到 NSOperation 的属性?

标签 cocoa concurrency key-value-observing nsoperation

我有一个反射(reflect) NSOperation 状态的窗口。我应该如何将 NSProgressIndicator 绑定(bind)到 NSOperation 的进度属性?

最佳答案

AppKit 不是线程安全的。对 UI 对象的任何更新必须发生在主线程上。 KVO 不会跨线程调度观察消息。因此,您需要另一种更新进度指示器的方法,而不仅仅是简单的 KVO。

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

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

关于cocoa - 如何将 NSProgressIndicator 绑定(bind)到 NSOperation 的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1395081/

相关文章:

cocoa - NSNetServices 在停止方法调用后仍然存在?

objective-c - 在 Cocoa 和 Cocoa Touch 中使用 int 是错误的吗?

python - 使用 ProcessPoolExecutor 在执行器中运行 AsyncIO

objective-c - 何时使用 NSEnumerationConcurrent

ios - 在 iOS 中观察链式 KVO 实体的好模式?

cocoa - 未针对所有属性调用 keyPathsForValuesAffectingValueForKey

cocoa - 如何以原子方式制作滚动和缩放动画?

objective-c - 关闭文档时在 document.m 中调用的方法

swift - 使@MainActor 类或 Actor 符合 Codable

ios - 整数属性的观察者