帮助:
它在设备上崩溃了。它在模拟器中崩溃了。但它不会在仪器工具中崩溃。我承认,我还在学习如何使用Instruments工具,也许我没有设置正确的设置来捕获错误。但是我已经在这方面工作了好几天,这让我发疯了。我的所有代码似乎执行得非常好。我正在使用NSNotificationCenter进行回调。当执行返回到视图并且数据在我的代码中设置时,数据就在那里。 当视图即将显示新数据时出现问题。相反,视图消失,应用程序因EXC_BAD_ACCESS错误而崩溃。我完全被难倒了。
我对NSZombie如何使用“乐器”工具感到困惑。一些说明说你不能在仪器工具中使用NSZombiesEnabled。我也无法成功查看日志。也许我正在尝试查看错误的日志,因为我看到的日志似乎不是人类可读的格式。
当我们开始(在C ++中)将CVMat位图转换为灰度级进行处理,在C ++中处理图像,然后在C ++中转换回颜色以进行显示时,我几乎99.9%确信问题就出现了。但即使在它周围放置一个try / catch块也没有发现错误。 Objective-C中的回调接收UIImage。
异步调用,多种语言,包装器,OpenCV库,许多故障点。我认为,由于种种原因,我必须成为仪器工具的专家,但现在我迫切希望得到任何建议。
我现在正在阅读Ray Wenderlich教程,但感谢其他可能遇到类似问题的人提供的信息。
答案 0 :(得分:4)
我真正希望找到的是,在代码处理完成后,其他人在汇编代码中的某个地方出现了这个错误,就像发生在我身上一样。我无法设置任何断点,因为它似乎没有出现在我的代码中。但经过很多耐心和一些额外的目光,我终于找到了根本原因。
这是一个OpenCV问题!!! 我将错误缩小到发生错误的方法(不是很容易,因为它没有停止在该调用上)但是在之后将cvMatFromUIImage方法拆分为两个方法(一个将图像转换为cv :: Mat,另一个转换为颜色)错误消失了。
- (cv::Mat)cvMatFromUIImage:(UIImage *)image
{
CGColorSpaceRef colorSpace = CGImageGetColorSpace(image.CGImage);
CGFloat cols = image.size.width;
CGFloat rows = image.size.height;
cv::Mat cvMat(rows, cols, CV_8UC4); // 8 bits per component, 4 channels (color channels + alpha)
CGContextRef contextRef = CGBitmapContextCreate(cvMat.data, // Pointer to data
cols, // Width of bitmap
rows, // Height of bitmap
8, // Bits per component
cvMat.step[0], // Bytes per row
colorSpace, // Colorspace
kCGImageAlphaNoneSkipLast |
kCGBitmapByteOrderDefault); // Bitmap info flags
CGContextDrawImage(contextRef, CGRectMake(0, 0, cols, rows), image.CGImage);
CGContextRelease(contextRef);
return cvMat;
}
- (cv::Mat)convertToRGB:(cv::Mat)grayMat
{
cv::Mat rgbMat;
cv::cvtColor(grayMat, rgbMat, CV_RGBA2RGB);
return rgbMat;
}
我希望这有助于其他人!