0

我的应用程序在以下代码点崩溃。仅在设备上,在模拟器应用程序上工作正常。

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 类文件中可用,它在那里创建新线程并使用该线程,应用程序数据被存储到本地数据库文件(在文档目录中)。

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

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

4

1 回答 1

1

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

如果该代码上没有编译器警告,我会在代码的不同点添加更多 NSLog 语句。然后在您的设备连接到运行 Xcode 的机器时在您的设备上运行该应用程序。在应用程序运行时观察控制台输出。

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

于 2013-07-11T14:29:56.503 回答