NSProgressIndicator的问题 - 也许是我的NSView子类?

时间:2011-01-12 10:07:40

标签: objective-c cocoa nsview nsprogressindicator

我创建了一个基本应用程序,创建了一个子类NSView,并在界面构建器中将其添加为自定义视图。一切正常。

然而某些事情无法正常工作,这让我想知道我的NSView是否正确地进行了子类化?具体来说,当使用NSProgressIndicator时,我可以使用startAnimating:和stopAnimating on indeterminate,但如果我尝试使用incrementBy执行任何操作,它什么也不做。

即使我将确定的NSProgressIndicator的默认值设置为50.0,它也会在应用程序以0.0开始时显示,尽管在IB中看起来很好。

我的NSProgressIndicator作为一个IBOutlet被正确连接,我可以告诉它隐藏等等,根本无法让它进行动画制作。但是,我还有其他问题让我觉得这个问题实际上是我的NSView子类(例如Quick Look没有触发)。

在我的子类中,我只是重写了initWithFrame:和drawRect方法,调用它们的[super]。正如我所说,我已经将它作为自定义视图放在界面构建器中并将其更改为MyCustomView。一切工作都很好......?

我是否正确地对此进行了子类化,或者没有正确地在界面构建器中执行某些操作?我好像错过了一些小事?!

2 个答案:

答案 0 :(得分:1)

解决了它。

我最初在awakeFromNib方法中执行以下操作:

- (void)awakeFromNib{
    [super awakeFromNib];
}

事实证明,如果awakeFromNib直接位于NSView下,则不应该调用super。删除超级修复问题。

- (void)awakeFromNib{
}

答案 1 :(得分:0)

您需要覆盖initWithFrame:,而不是init。这可能就是问题所在。

使用进度指示器时要注意另一件事:如果您正在做大量工作,您可能希望将其延迟到下一个运行循环迭代,以使进度指示器刷新。使用延迟执行(performSelector:withObject:afterDelay :)或类似的东西以允许UI更新。