dispatch_async仅在iOS设备上崩溃,为什么?

时间:2013-07-11 14:05:49

标签: c++ ios multithreading grand-central-dispatch

我的应用程序在代码点下面崩溃了。只有在设备上,模拟器应用程序才能正常工作。

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
               , ^(void) {

                   // do some time consuming things here
                   // perform task here which required to be run on separate thread/queue

                   CPPClass& ptr = CPPClass::GetInstance();
                   ptr.SyncTrackingData([newObject primaryID]);

                   dispatch_async(dispatch_get_main_queue(), ^{

                       // after completion of those thread tasks
                       // do some things here in the main queue
                       // for example: update UI controls, etc.

                       NSLog(@" Synchronization Done ");
                   });
               });

以下是此方法执行的应用流程:

  • 从Web服务获取JSON响应中的数据(使用libCurl)
  • 解析数据并创建模型对象
  • 创建模型对象后,还需要将该数据同步到本地数据库。因此,使用参数调用SyncTrackingData方法 - 处理该方案。

关于SyncTrackingData方法:此方法在CPP类文件中可用,它在那里创建新线程并使用该线程,应用程序数据被存储到本地数据库文件(在文档目录中)。

我们正在为这个方法使用单独的线程 - 因为我们已经有了Model对象,所以可以显示视图数据,并且可以将数据库填充作为后台进程完成。

任何猜测可能是什么原因。

1 个答案:

答案 0 :(得分:1)

您是否在代码中查找了任何编译器警告?

如果该代码没有编译器警告,我会在代码中的不同位置再撒一些NSLog语句。然后在设备连接到运行Xcode的计算机时,在设备上运行应用程序。在应用程序运行时观察控制台输出。

此外,您可以在事后查看控制台输出 - 当设备连接时,只需打开管理器窗口并单击设备的“设备日志”。