我试过了
(1)清洁打印文件夹,
(2)从模拟器和iphone中删除应用程序,
(3)重启,
(4)并启用NSZombieEnabled但它似乎没有做任何事情
(5)使用调试器lldb和gdb
(6)和gaurd malloc
我有xcode 4.3.2。这个错误发生在模拟器和我的iPhone上。
(在模拟器上显示EXC_BAD_INSTRUCTION code=i386 subcode=0x0
,在设备上显示EXC_BREAKPOINT (SIGTRAP)
这是两个崩溃日志:
在日志中打印:
Trace/BPT trap: 5
Segmentation fault: 11
正如您在崩溃中看到的那样,我的任何ViewControllers都没有回溯。在询问(link)之前我做了很多谷歌搜索,但很多其他人(link)有这个错误的追溯到他们的应用程序。这个应用程序的常见原因是什么?我应该从哪里开始寻找错误?我没有一件事可以重现,只需运行一段我的代码10次,它至少会崩溃一次。谢谢!
编辑: 继承了一些代码
outputPipe = [[NSPipe alloc] init];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getDataOut:) name:NSFileHandleReadToEndOfFileCompletionNotification object:[outputPipe fileHandleForReading]];
[[NSNotificationCenter defaultCenter] removeObserver:self name:NSFileHandleReadToEndOfFileCompletionNotification object:[outputPipe fileHandleForReading]];
我稍后会在代码中发布outputPipe。
编辑2:更改[NSPipe管道];至[[NSPipe alloc] init];没有解决它。
在观察者之间切换的代码:
buttondone.title=@"Done";
//dlog(@"last output notification inbound");
stdoutisdone=YES;
[[NSNotificationCenter defaultCenter] removeObserver:self name:NSFileHandleReadCompletionNotification object:[outputPipe fileHandleForReading]];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getDataOut:) name:NSFileHandleReadToEndOfFileCompletionNotification object:[outputPipe fileHandleForReading]];
[[outputPipe fileHandleForReading] readToEndOfFileInBackgroundAndNotify];
答案 0 :(得分:0)
我通过删除对第二个NSFileHandle方法的调用来解决它。所以,而不是:
[[NSNotificationCenter defaultCenter] removeObserver:self name:NSFileHandleReadCompletionNotification object:[outputPipe fileHandleForReading]];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getDataOut:) name:NSFileHandleReadToEndOfFileCompletionNotification object:[outputPipe fileHandleForReading]];
[[outputPipe fileHandleForReading] readToEndOfFileInBackgroundAndNotify];
我用这个:
NSString * output=[[outputPipe fileHandleForReading] readToEndOfFile];
它会产生一点UI延迟,可以在任务完成后通过调用readInBackgroundAndNotify
一次或两次来减少。如果有人有更好的解决方案,我会将你的标记作为答案。