运行NSOpenPanel时,我得到一个EXC_BAD_ACCESS来选择文件系统上的目录。
只有当我创建一个新文件夹(使用默认的"新文件夹"按钮)然后我选择并打开它(使用默认的"打开"按钮)时,应用程序才会崩溃。
如果我只是打开现有文件夹,一切正常。
NSOpenPanel *browsePanel = [[NSOpenPanel alloc] init];
[browsePanel setCanChooseFiles:NO];
[browsePanel setCanChooseDirectories:YES];
[browsePanel setCanCreateDirectories:YES];
[browsePanel beginSheetForDirectory:nil
file:nil
types:nil
modalForWindow:self.window
modalDelegate:self
didEndSelector:@selector(browsePanelPanelDidEnd:returnCode:contextInfo:)
contextInfo:[NSNumber numberWithInteger:[sender tag]]];
应用程序在调用didEndSelector之前崩溃。
感谢
PS。我已经尝试将contextInfo设置为nil,无论如何它都会崩溃。
答案 0 :(得分:0)
这通常是因为您正在向已释放的对象发送消息。也被称为僵尸。你可以做两件事,首先使用NSZombieEnabled = YES运行应用程序,或者其次运行乐器并寻找僵尸。我建议使用仪器,因为它提供了最好的反馈,并允许您探索数据。
启用Zombie检测将显示正在向哪个对象发送消息,并允许您查找发送消息的原因或者为什么要取消分配所需的内容。
上面的代码并不足以详细说明这一点。僵尸在一个完全不同的代码段中并不罕见,因为它完全是关于解除分配的实例。你可能在其他地方做过的事情。