Ios 目标c线程1信号SIGSTOP应用程序崩溃
我正试图找出一个错误,这显然是一个时间问题。我有一个使用通用框架的应用程序。当流程在框架中完成时,会向应用程序发回NSNOTIONG。我们最近在我们的框架中添加了一个第三方框架。现在,在执行第三方框架的方法时,当执行返回到我们的框架时,我在控制台输出中收到以下错误:Ios 目标c线程1信号SIGSTOP应用程序崩溃,ios,objective-c,multithreading,boost,Ios,Objective C,Multithreading,Boost,我正试图找出一个错误,这显然是一个时间问题。我有一个使用通用框架的应用程序。当流程在框架中完成时,会向应用程序发回NSNOTIONG。我们最近在我们的框架中添加了一个第三方框架。现在,在执行第三方框架的方法时,当执行返回到我们的框架时,我在控制台输出中收到以下错误: Assertion failed: (exclusive), function assert_locked, file ../dep/include/boost/boost_1_55_0/boost/thread/pthread/s
Assertion failed: (exclusive), function assert_locked, file ../dep/include/boost/boost_1_55_0/boost/thread/pthread/shared_mutex.hpp, line 51.
但我不确定这是否是最终的问题,因为我们的框架将继续执行,并且NSNotification将被发送回应用程序。在我们的框架中,在发送通知并执行返回到调用方法(或方法调用)之后,我在执行线程上看到一条警告。然后,执行继续回到原始调用方法,警告消失
这是奇怪的部分。如果我一步一步地完成代码,它可能会正常工作。如果我不够慢,我会得到SIGSTOP,代码永远不会返回到UI。如果我跑得太快,我会得到一个SIGABRT
我一直在用仪器寻找确切的问题。支持我的怀疑,这是一个时间问题。我认为boostassert\u-locked断言可能与此有关
我的代码很无聊,但我知道你想看,所以这里是:
- (void)generateImageTemplates:(UIImage *)src
{
int result = 0;
cv::Mat image = *(cv::Mat*)[self cvMatFromUIImage:src];
user = IEngine_InitUser();
int userID=0;
result = IEngine_AddFingerprintRAW(user, UNKNOWN, image.data, image.size().width, image.size().height);
result = IEngine_RegisterUser(user, &userID);
[[NSNotificationCenter defaultCenter] postNotificationName:@"InnovatricsComplete" object:self];
}
如果您想知道结果是什么,这是一个错误代码。到目前为止,这些值都等于0。意思是没有错误。一旦我能够成功地返回到UI而不会崩溃,我将处理这些错误
控件返回到方法调用:
- (void)generateImageTemplates:(UIImage *)processedImage
{
[self.captureCommand generateImageTemplates:processedImage];
}
控件返回到应用程序视图控制器中的方法调用:
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
if (buttonIndex == 0){
[self clearPressed:self.clearButton];
} else {
[self.cameraVC generateImageTemplates:self.processedImage];
}
}
最后,NSNotification回调代码:
- (void)onInnovatricsComplete:(NSNotification *)note
{
[self.cameraVC willMoveToParentViewController:nil];
[self.cameraVC.view removeFromSuperview];
[self.cameraVC removeFromParentViewController];
}
我警告过你这很无聊
我完全被难住了!虽然我一直在网上寻找线索,但有没有人能帮我解决这个问题
多谢各位
以下是一些截图(按相反顺序):
请在中查看NSUinteger的答案
侦听器可能在收到通知之前被解除分配 太容易了!我运行仪器,寻找僵尸,但没有找到。另外,我在viewDidEnglishe中有这样的代码来解除锁定所有观察者:[[NSNotificationCenter defaultCenter]removeObserver:self];您是否可以尝试在不使用notificationCenter而是使用委托的情况下实现相同的逻辑?我想看看您的代码是否与NSNotificationCenter有问题我昨天花了一整天的时间,得出的结论是这是第三方工具的问题,或者我没有正确地实现它。如果我删除了对第三方工具的最后一次调用,那么一切都会正常工作。很抱歉造成混乱,但我不知道问题发生在哪里。我仍然想了解更多关于SIGSTOP的信息。不过,我会给你投票支持通知后的答案,因为这通常是导致类似这样的通知问题的原因。谢谢你的回复。哈哈,你最好删除那条评论,否则会有变态狂发电子邮件给你!:O