我正在使用 NSOpenPanel 允许用户从他们的 MAC 中选择一个文件。该面板可以正常打开并过滤掉正确的文件,但是一旦我单击文件,我的应用程序就会崩溃。
这是我打开面板的代码:
if ([openDlg runModalForDirectory:begin file:filename types:filetypes] == NSOKButton)
{
NSArray* selected = [openDlg filenames];
for (int i = 0; i < (int)[selected count]; i++)
{
NSString* fileName = [selected objectAtIndex:i];
string fn = [fileName UTF8String];
results->Append(Value::NewString(fn));
}
}
代码永远不会从 runmodalForDirectory 方法调用返回。
因此,一旦我选择了一个文件,调试器控制台就会这样说:
Program received signal: “EXC_BAD_ACCESS”.
warning: Unable to restore previously selected frame.
Data Formatters temporarily unavailable, will re-try after a 'continue'. (Not safe to call dlopen at this time.)
简而言之,我认为此时调用 dlOpen 并不安全。
然后我得到这个:
调用堆栈如下所示:
递归调用发生前的调用栈:
调用堆栈位于名为 WebFullScreenController.mm 的 WebKit 框架文件中,递归调用此方法 setDisableActions:
@implementation CATransaction(SnowLeopardConvenienceFunctions)
+ (void)setDisableActions:(BOOL)flag
{
[self setValue:[NSNumber numberWithBool:flag] forKey:kCATransactionDisableActions];
}
有人知道为什么会这样吗?提前致谢。