在dispatch_async主队列中为core数据尝试saveContext时崩溃

时间:2016-12-08 04:21:13

标签: ios swift core-data dispatch-async

从核心数据中删除对象后,我在主队列中保存上下文。 所以我正在检查主线程与否,如果没有在主线程中执行dispatch_async。 使用Concurrecny类型创建NSManagedObjectContext是ConfinementConcurrencyType

用于保存上下文的代码:

mail.EmailMessage(sender='John Doe <no-reply@my-custom-domain.com', 

Crashlytics的崩溃报告:

public static func saveContext(managedContext : NSManagedObjectContext){
    AppDelegate.getAppDelegate().log.debug("saveContext()")

    if NSThread.isMainThread() == true{
      do {

        try managedContext.save()
      }catch let error as NSError{
        AppDelegate.getAppDelegate().log.error("Could not save \(error), \(error.userInfo)")
      }
    }else{
      dispatch_async(dispatch_get_main_queue()) { () -> Void in
        do {

          try managedContext.save()
        }catch let error as NSError{
          AppDelegate.getAppDelegate().log.error("Could not save \(error), \(error.userInfo)")
        }
      }
    }
  }

1 个答案:

答案 0 :(得分:0)

您不应使用系统的线程API,而应使用Core Data自己的线程API。

context.performBlockAndWait() {  // or performBloc() to return immediately
    do { try context.save() } catch {}
}