Ios 目标c线程1信号SIGSTOP应用程序崩溃

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

我正试图找出一个错误,这显然是一个时间问题。我有一个使用通用框架的应用程序。当流程在框架中完成时,会向应用程序发回NSNOTIONG。我们最近在我们的框架中添加了一个第三方框架。现在,在执行第三方框架的方法时,当执行返回到我们的框架时,我在控制台输出中收到以下错误:

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