运行NSOpenPanel时EXC_BAD_ACCESS?

时间:2012-01-10 08:27:37

标签: objective-c cocoa

运行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,无论如何它都会崩溃。

1 个答案:

答案 0 :(得分:0)

这通常是因为您正在向已释放的对象发送消息。也被称为僵尸。你可以做两件事,首先使用NSZombieEnabled = YES运行应用程序,或者其次运行乐器并寻找僵尸。我建议使用仪器,因为它提供了最好的反馈,并允许您探索数据。

启用Zombie检测将显示正在向哪个对象发送消息,并允许您查找发送消息的原因或者为什么要取消分配所需的内容。

上面的代码并不足以详细说明这一点。僵尸在一个完全不同的代码段中并不罕见,因为它完全是关于解除分配的实例。你可能在其他地方做过的事情。