3

このフォーラムで見つかったコードに基づいたルーチンがあります。

+ (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 異常

これを説明できるものは何ですか?

情報をお寄せいただきありがとうございます。

システム情報: OS X 10.8.4。ARC を使用してコンパイルされます。

4

3 に答える 3

7

実際、すべての例外にブレークポイントがあったと思います。私はちょうどこれに遭遇し、その理由を探していました. この投稿に出くわしましたが、次のことがわかりました。

Xcode 4.5.1 でデバッグすると NSOpenPanel がクラッシュする

プロジェクトを再作成すると、ブレークポイントがリセットされました。

于 2013-11-04T01:16:15.803 に答える
0

プロジェクトファイルに異常があったようです。すべてのソース ファイルと xib ファイルを新しいプロジェクトにコピーした後、NSOpenPanel runModal は期待どおりに機能しました。

于 2013-07-05T21:06:34.537 に答える
0

同様の問題がありました。すべてのプロジェクト ファイルを保存していたわけではありません (同じコードが別のマシンで完全に機能しました)。それらを1つずつ削除しましたが、効果はありません。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 は確かに必要です。

于 2014-01-16T17:57:52.697 に答える