NSOpenPanel runModal崩溃?

时间:2013-07-04 19:45:12

标签: xcode cocoa nsopenpanel

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

+ (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:

NSOpenPanel runModal anomaly

有什么可以解释这个?

非常感谢所有人提供任何信息。

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

3 个答案:

答案 0 :(得分:7)

我实际上认为你在所有例外都有断点。我刚碰到这个并且正在寻找原因。我遇到了这篇文章,但随后发现了以下内容。

NSOpenPanel crashes when debugging with Xcode 4.5.1

重新创建项目时,断点已重置。

答案 1 :(得分:0)

看起来项目文件中存在一些异常现象。我将所有源文件和xib文件复制到一个新项目,然后NSOpenPanel runModal按预期工作。

答案 2 :(得分:0)

有类似的问题。我没有存储所有项目文件(相同的代码在另一台机器上完美运行)。我一个一个地删除它们,没有效果。删除了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。