调试期间NSOpenPanel保持打开状态

时间:2015-06-19 23:02:15

标签: xcode cocoa debugging nsopenpanel

有没有办法强制NSOpenPanel关闭,这样我可以在调试时看到屏幕?在调试时我无法在Xcode中看到它背后的代码,我也无法移动面板。

这就是我所拥有的:

- (IBAction)openImage:(id)sender {
    NSArray* fileTypes = [[NSArray alloc] initWithObjects:@"jpg", @"JPG", nil];

    NSOpenPanel *panel = [NSOpenPanel openPanel];
    [panel setCanChooseDirectories:NO];
    [panel setCanChooseFiles:YES];
    [panel setAllowsMultipleSelection:NO];
    [panel setAllowedFileTypes:fileTypes];

    [panel beginWithCompletionHandler:^(NSInteger result) {
        if (result == NSFileHandlingPanelOKButton) {

            self.image = [[NSImage alloc] initWithContentsOfURL:panel.URL];
            [panel close];


            [self doSomethingWithImage];

        }else{
        }
    }];
}

- (void) doSomethingWithImage {
    // if I put a breakpoint here, 
    // the NSOpenPanel is still on the screen and I can't move it.

}

2 个答案:

答案 0 :(得分:1)

一个简单的解决方法是在主队列上安排-doSomethingWithImage,以便在执行[panel beginWithCompletionHandler:^(NSInteger result) { if (result == NSFileHandlingPanelOKButton) { self.image = [[NSImage alloc] initWithContentsOfURL:panel.URL]; [panel close]; dispatch_async(dispatch_get_main_queue(), { () -> Void in [self doSomethingWithImage]; }); }else{ } }]; 之前完成处理程序(并关闭对话框)。

def create_zip_file(targetDirectory, projectToZip)
    semver_contents = get_contents_of('SEMVER')
    zipFileName = "#{targetDirectory}/#{projectToZip}.#{semver_contents}.zip"
    filesToZip =  FileList["../#{projectToZip}/bin/#{BUILD_CONFIG}/**"]   
    Zip::File.open(zipFileName, Zip::File::CREATE) do |zipFile|
        filesToZip.each do |filename|
            zipFile.add(filename, filename)
        end
    end     
end

答案 1 :(得分:1)

我个人发现了两种方法:

  1. 如果您启动应用,请将应用或Xcode移至其他桌面。因此,当您运行应用时,当您到达断点并且打开的面板不会妨碍Xcode时,它会跳转到另一个桌面(Xcode所在的位置)。

  2. 使用beginSheetModalForWindow:编码几乎相同,但在调试时面板不会隐藏Xcode的部分内容。 OpenPanel作为与窗口相关的选择面板运行。对于beginSheetModalForWindow,您必须指明相关窗口(通常是主窗口),这是唯一需要的额外编码。