4

我有一个反映NSOperation. 我应该如何将 绑定NSProgressIndicatorNSOperation的进度属性?

4

2 回答 2

7

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

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

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

于 2009-09-08T19:35:37.463 回答
0

Ben Copsey 的ASIHTTPRequest包装纸就是这样做的。

该请求是 的子类NSOperation,您可以在实例化时将进度指示器传递给它。

如果您想了解它是如何工作的,您可以查看该代码。

于 2009-09-08T19:42:24.737 回答