1

我尝试过
(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)
这是两个崩溃日志:

http://pastie.org/3941419

http://pastie.org/3941427

在日志中打印:

Trace/BPT trap: 5
Segmentation fault: 11

正如您在崩溃中看到的那样,我的任何 ViewController 都没有回溯。在询问(链接)之前我做了很多谷歌搜索,但是很多其他人(链接)有这个错误可以追溯到他们的应用程序。这个应用程序的常见原因是什么,我应该从哪里开始寻找错误?我不能做任何事情来重现,只需运行我的一段代码 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] 初始化];没有修复它。

在观察者之间切换的代码:

 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];
4

1 回答 1

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在任务完成后调用一次或两次来减少。如果有人有更好的解决方案,我会将您的标记为答案。

于 2012-05-27T18:32:43.323 回答