NSOpenPanel表现得很奇怪

时间:2013-01-22 22:17:45

标签: cocoa nsopenpanel

我正在尝试使用NSOpenPanel打开打开的文件页面。除了3件事之外,它大部分工作正常:

  1. 第一个问题是边栏没有出现,虽然我仍然可以点击它。

  2. 第二个问题是,当我切换到文件少于前一个文件夹的文件夹时,屏幕不会被清除,之前的一些文件仍会显示,尽管它们不可点击。

    < / LI>
  3. 当我尝试切换到列视图时,应用程序崩溃了。但所有其他3个观点都运作得很好。

  4. 这是崩溃日志:

    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项目中,它运行得很好,所以我不太确定问题出在哪里。谢谢!

1 个答案:

答案 0 :(得分:0)

我发现了问题。事实证明,在我的项目中,我重新定义了NSTableView,这导致了所有错误。