使用 NSThread 时出错

Posted

技术标签:

【中文标题】使用 NSThread 时出错【英文标题】:Error when using NSThread 【发布时间】:2012-03-14 17:11:56 【问题描述】:

当我的应用程序第一次启动时,它会将 plist 的内容加载到 sqlite 表中。我正在使用 NSThread 来运行该过程,但是一旦该过程完成,它就会引发错误。我用来调用进程并运行它的代码如下 -

[NSThread detachNewThreadSelector:@selector(addData) toTarget:self withObject:nil];

-(void)addData

   @try        
      sqlite3_stmt *stmt;
      NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
      [NSThread sleepForTimeInterval:1];
  .
  .
  Process Data
  .
  .
     [pool drain];  
   
   @catch (NSException *exception) 
   

错误是一个SIGABRT错误,出现在下面的代码中-

int main(int argc, char *argv[])

    @autoreleasepool 
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    

我已经在 Debug 中逐步完成了该过程,该过程正常完成,但几秒钟后它会引发此错误。它发生在线程 1 中,代码在 Main.m 中

谁能告诉我我哪里错了。

【问题讨论】:

获取 SIGABRT 并且调试器在 UIApplicationMain 上停止通常是由于引发了 NSException 而发生的......在这种情况下,异常的一些细节将被打印到调试器控制台。如果查看上述细节并不能解决您的问题,在此处复制它们可能会帮助您获得一个好的答案。 (如果您没有看到调试器输出,您可能想尝试删除您的 @try/@catch 构造。) 如果在线程 1 中引发异常,我认为该问题与发布的代码无关。 【参考方案1】:

要查找崩溃位置,请使用调试器,如图所示。! *在调试器pan中使用“所有异常断点”添加断点。

【讨论】:

感谢大家的回复。我检查了调试器的输出,它是 '2012-03-15 09:04:01.472 Poisons[3334:207] -[ViewController updateMyProgressBar]: unrecognized selector sent to instance 0x6846260' 我检查了代码,发现我丢失了程序。现在一切正常。

以上是关于使用 NSThread 时出错的主要内容,如果未能解决你的问题,请参考以下文章

进入后台状态时是不是可以在 iOS 4 设备上运行 NSThread 或 NSTimer?

多线程NSThread

iOS多线程篇:NSThread简单介绍和使用

多线程NSThread

16iOS多线程篇:NSThread

iOS 多线程之 NSThread的基本使用