0

NSOpenPanel を使用して、開いているファイル ページを表示しようとしています。次の 3 つの点を除いて、ほとんどの場合問題なく動作します。

  1. 最初の問題は、サイド バーをクリックすることはできますが、表示されないことです。

  2. 2 つ目の問題は、以前のファイルよりも少ないファイルを含むフォルダーに切り替えると、画面がクリアされず、以前のファイルの一部が表示されたままになっていることです。ただし、それらはクリックできません。

  3. 列ビューに切り替えようとすると、アプリがクラッシュします。しかし、他の 3 つのビューはすべて正常に機能します。

クラッシュログは次のとおりです。

AppKit`-[NSTableView setVerticalMotionCanBeginDrag:]:
0x7fff91d4f899:  pushq  %rbp
0x7fff91d4f89a:  movq   %rsp, %rbp
0x7fff91d4f89d:  movq   7385076(%rip), %rax       ; TrustKeychains::systemKcHandle() + 92
0x7fff91d4f8a4:  movq   (%rax,%rdi), %rax
0x7fff91d4f8a8:  movq   7385193(%rip), %rcx       ; tp_policyTrustSettingParams + 92
0x7fff91d4f8af:  movl   $4292870143, %edi
0x7fff91d4f8b4:  andl   (%rax,%rcx), %edi   <- Crash points here with EXC_BAD_ACCESS (code=1, address = 0x18)
0x7fff91d4f8b7:  shll   $21, %edx
0x7fff91d4f8ba:  andl   $2097152, %edx
0x7fff91d4f8c0:  addl   %edi, %edx
0x7fff91d4f8c2:  movl   %edx, (%rax,%rcx)
0x7fff91d4f8c5:  popq   %rbp
0x7fff91d4f8c6:  ret    

クラッシュ ログには、クラッシュがスレッド 1 で発生したことが示されています。

誰かがそれを修正する方法を知っているかどうか疑問に思っていました。これが私のコードです

-(IBAction)openDialog:(id)sender{
NSWindow *window = [[viewArray objectAtIndex:currentIndex] window];

NSOpenPanel *openDialog = [NSOpenPanel openPanel];
[openDialog setCanChooseFiles:YES];
[openDialog setCanChooseDirectories:NO];
NSString *homeString = [NSString stringWithFormat:@"file://localhost%@",NSHomeDirectory()];
[openDialog setDirectoryURL:[NSURL URLWithString:homeString]];
NSArray *fileTypes = [[NSArray alloc] initWithObjects:@"xcodeproj", nil];
[openDialog setAllowedFileTypes:fileTypes];

[openDialog beginSheetModalForWindow:window completionHandler:^(NSInteger result){
    if (result == NSFileHandlingPanelOKButton){
        NSURL *doc = [openDialog URL];
        [[NSWorkspace sharedWorkspace] openFile:[doc relativePath]];
    }
}];

}

まったく同じコードを別の XCode プロジェクトに配置しましたが、問題なく動作するため、どこに問題があるのか​​ よくわかりません。ありがとう!

4

1 に答える 1

0

問題が見つかりました。私のプロジェクトで NSTableView を再定義したことが判明し、それがすべてのエラーの原因となっていました。

于 2013-01-23T06:17:46.317 に答える