如何使用 Cocoa Bindings 使用 NSProgress 更新进度条?

Posted

技术标签:

【中文标题】如何使用 Cocoa Bindings 使用 NSProgress 更新进度条?【英文标题】:How do I update a progress bar using NSProgress using Cocoa Bindings? 【发布时间】:2014-04-07 22:47:56 【问题描述】:

我一直在尝试使用新的 NSProgress 类来报告我的 Mac 应用程序中的操作进度。现在,它已作为属性保存在我的 App Delegate 中(并从不同的类和不同的队列中更新),并且似乎已正确更新,正如记录 [_currentProgress fractionCompleted] 所证明的那样。

但是,当我尝试使用 NSProgress 对象更新进度条时,我的问题就出现了。我已经用类似这样的绑定设置了进度条:

进度条似乎停留在我的空占位符上(通过将空占位符更改为“1”来证明),而不是重新绘制或更新以适应任何进一步的进展。 currentProgress 仅在操作开始后设置,这就是为什么进度条一开始使用空占位符的原因,但当 NSProgress 对象设置为该属性时,它不会更新进度条。

如果有人能在这里帮助我,那就太好了……(一定是我做错了什么愚蠢的事情!)

【问题讨论】:

在您的应用委托中创建一个新的 double 属性,将 fractionCompleted 分配给此属性并将您的进度条绑定到此 double 值。它现在应该更新,您可能会知道如何解决进度绑定问题 【参考方案1】:

除非您另有说明,否则我将假设您使用的是不确定的进度条。

Cocoa NSProgressIndicator 可以是不确定的,在这种情况下,它是一个理发店风格的漩涡,要么移动要么不移动:

或者,它们可以是确定的,在这种情况下,它是典型的从左到右擦除进度条:

尝试取消选中不确定并查看是否使用此设置显示您的进度:

【讨论】:

好的,很抱歉延迟回复,感谢您抽出宝贵时间回答,但这不是我的问题。我的进度条(它实际上是 NSProgressIndicator 的子类,但如果我仍然使用它,我会得到相同的行为)。它 not 设置为不确定的进度条,我过去曾设法直接在代码中设置它。但是,我一直在尝试使用 NSProgress 和 Cocoa Bindings 迁移到更新它,这就是我开始遇到问题的地方。【参考方案2】:

我认为问题在于,如果使用的 NSProgress 正在后台队列上更新,则不能使用 fractionCompleted 的绑定。我现在正在自己实现这个组合,我没有像你这样通过普通绑定出现一个栏。如果我希望 KVO 观察它并设置条形图的 doubleValue,它就可以工作......只要我将它分派到主队列中。

【讨论】:

以上是关于如何使用 Cocoa Bindings 使用 NSProgress 更新进度条?的主要内容,如果未能解决你的问题,请参考以下文章

NS前缀是啥意思?

Cocoa - 绑定 - Tableview - 如何计算列的总和

快速从电子邮件中获取 plist 附件(NS Cocoa 错误域代码 260)

Cocoa 的 NSDictionary:为啥要复制密钥?

ArrayController 找不到 AppDelegate(Cocoa 中的绑定)

NS前缀是什么意思?