Macos NSToolbarItem中的NSProgressIndicator setDoubleValue无工作

Macos NSToolbarItem中的NSProgressIndicator setDoubleValue无工作,macos,cocoa,xcode6,Macos,Cocoa,Xcode6,我将NprogressIndicator放在两个位置(一个用于窗口的内容视图,另一个用于使用setView函数的工具栏项) Mac OS X 10.10/Xcode 6.1 NSPROGRESS指示器通过IB和称为“go”的测试方法连接 当窗口的contentView中的NSProgressIndicator为work时。但在工具栏中,该项不起作用。为什么? @property (nonatomic) IBOutlet NSProgressIndicator *progressIndicator

我将NprogressIndicator放在两个位置(一个用于窗口的内容视图,另一个用于使用setView函数的工具栏项)

Mac OS X 10.10/Xcode 6.1

NSPROGRESS指示器通过IB和称为“go”的测试方法连接 当窗口的contentView中的NSProgressIndicator为work时。但在工具栏中,该项不起作用。为什么?

@property (nonatomic) IBOutlet NSProgressIndicator *progressIndicator;

- (IBAction)go:(id)sender {

    [progressIndicator setUsesThreadedAnimation:YES];

    for (int i = 0; i <= 1000; i++) {

        [progressIndicator setDoubleValue:(double)i];
        [progressIndicator displayIfNeeded];
    }
}
@property(非原子)IBOutlet进程指示器*progressIndicator;
-(iAction)go:(id)发件人{
[progressIndicator setUsesThreadedAnimation:是];

对于(int i=0;i您不能在工具栏中的项目中真正创建视图的出口。您在NIB中设置的是工具栏项目的原型。它不是运行时的实际项目。要找到它,您需要枚举窗口工具栏中的项目,找到一个使用您分配给包含进度指示器的项目的标识符,获取其视图,然后使用该标识符。如果进度指示器不是项目的唯一视图(即,如果项目的视图包含视图层次结构,并且某个子代是进度指示器),则必须使用常用的技术,例如按标记(-viewWithTag:)搜索

下面是简单案例的示例代码:

for (NSToolbarItem* item in self.window.toolbar.items)
{
    if ([item.itemIdentifier isEqualToString:YourIdentifierForTheToolbarItem])
    {
        NSProgressIndicator* progressIndicator = (NSProgressIndicator*)item.view;
        progressIndicator.doubleValue = 20;
    }
}

我仍然不能得到正确的结果。你能给我一个例子吗。提前谢谢。嗯,我给了一个例子。你尝试了什么?它是怎么失败的?1.我自定义了一个视图,插入了一个progressIndicator,然后通过IB连接到progressIndicator。2.使用setview方法在自定义视图中创建一个toolbaritem,然后添加到工具栏中。3.编写一个测试我方法参考您的示例设置双值。但它仍然不起作用。我告诉您,在IB中连接插座是无用的。您必须根据代码中的标识符查找工具栏项,如我所示。此外,从您刚刚编写的内容来看,还不清楚进度指示器是工具栏项的即时视图还是您有包含进度指示器的容器视图。如果是后者,则需要在项目视图中查找进度指示器。您可以在IB中的进度指示器上设置标记,然后使用
-viewWithTag:
进行查找。我无法为progressIndicator设置标记,我可以在运行时获取progressIndicator地址。我不需要这样做测试非常有效。(将progressIndicator样式从条形图更改为旋转,然后开始动画,看起来很有效。表示我可以获得正确的progressIndicator地址)