【问题标题】:NSOpenPanel runModal Crashes?NSOpenPanel runModal 崩溃?
【发布时间】:2013-07-04 19:45:12
【问题描述】:

我有一个基于此论坛上的代码的例程:

+ (FSRef)useOpenFileToGetFSRef:(NSString **)fileName requiredFileType: (NSString*) requiredFileType
{
     FSRef fileFSRef;
    NSArray* fileTypes = [[NSArray alloc] initWithObjects:requiredFileType, nil];

    //http://stackoverflow.com/questions/11815784/objective-c-nsopenpanel-get-filename
    NSOpenPanel* openDlg = [NSOpenPanel openPanel];
    [openDlg setFloatingPanel:YES];
    [openDlg setCanChooseDirectories:NO];
    [openDlg setCanChooseFiles:YES];
    [openDlg setAllowsMultipleSelection:YES];
    [openDlg setAllowedFileTypes:fileTypes];

    if ( [openDlg runModal] == NSOKButton )  //<== CRASHES ON CALL TO runModal
    {
        NSArray* filePaths = [openDlg URLs];
        //only getting 1st file
        NSURL *fileUrl = [filePaths objectAtIndex:0];

        *fileName = [fileUrl path];
        CFURLGetFSRef((CFURLRef)fileUrl, &fileFSRef);
    }

    return fileFSRef;
}

应用程序在调用 runModel 时反复崩溃:

这能解释什么?

非常感谢大家提供任何信息。

系统信息:OS X 10.8.4。使用 ARC 编译。

【问题讨论】:

  • 有什么异常?
  • 根据您的图像,抛出发生在另一个线程 quicklook.pluginload 中,而不是直接在 runModal 本身中。你在对话框里做什么?您是否安装了自定义 quicklook 插件?
  • 我还没有看到异常名称的通知。
  • 我没有运行任何自定义 quicklook 插件。
  • 什么可能导致 quicklook 线程崩溃?

标签: xcode cocoa nsopenpanel


【解决方案1】:

我实际上认为你在所有异常上都有一个断点。我刚遇到这个,正在寻找原因。我遇到了这篇文章,但后来发现了以下内容。

NSOpenPanel crashes when debugging with Xcode 4.5.1

当您重新创建项目时,断点被重置。

【讨论】:

  • 几个月后我才看到这条评论。很有意思!那么打开和保存对话框中的异常是否正常?
【解决方案2】:

项目文件中似乎有一些异常。我将所有源文件和 xib 文件复制到一个新项目中,之后 NSOpenPanel runModal 就按预期工作了。

【讨论】:

    【解决方案3】:

    遇到了类似的问题。我没有存储所有项目文件(相同的代码在另一台机器上完美运行)。我一个一个删除,没有效果。删除了DerivedData 目录,没有效果。

    lappy:vStacks ndunn$ hg st 。 ? StacksGui3.xcodeproj/project.xcworkspace/xcuserdata/ndunn.xcuserdatad/UserInterfaceState.xcuserstate ? StacksGui3.xcodeproj/xcuserdata/ndunn.xcuserdatad/xcschemes/StacksGui3.xcscheme ? vStacks.xcodeproj/project.xcworkspace/xcuserdata/ndunn.xcuserdatad/UserInterfaceState.xcuserstate ? vStacks.xcodeproj/xcuserdata/ndunn.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist ? vStacks.xcodeproj/xcuserdata/ndunn.xcuserdatad/xcschemes/vStacks.xcscheme ? vStacks.xcodeproj/xcuserdata/ndunn.xcuserdatad/xcschemes/xcschememanagement.plist

    我正打算做你所做的,但我最终:
    1 - 删除我的 vStacks.xcodeproj 和源
    2 - 创建另一个同名
    3 - 删除新的
    4 - 从源代码控制中恢复整个项目。

    注意:不确定步骤 2 和 3 是否必要,但肯定需要步骤 1 和 4。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多