0
我想使用NSOpenPanel調出打開的文件頁面。它工作正常,在大多數情況下,除了3件事情:NSOpenPanel代理怪異
的第一個問題是,側欄不會出現,但我仍然可以點擊它。
第二個問題是,當我切換到文件比以前文件少的文件夾時,屏幕不會被清除,並且一些以前的文件仍然出現,儘管它們是不可點擊的。
當我嘗試切換到列視圖時,應用程序崩潰。但所有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項目,它工作得很好,所以我不太清楚問題出在哪裏。謝謝!
聽起來像堆棧損壞。 – trojanfoe
什麼是堆棧損壞?對不起,我還在學習如何使用Objective-C進行編碼 – user1998511