首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSManagedObjectContext死锁

NSManagedObjectContext死锁
EN

Stack Overflow用户
提问于 2016-03-28 18:56:03
回答 1查看 167关注 0票数 0

最近我遇到了一个我无法解释的问题。因此,我有一个包含单个文档(NSManagedObject)的类DocumentContext。这些类的代码如下

代码语言:javascript
复制
extension Document {

  @NSManaged var title: String?
  @NSManaged var type: String?
  @NSManaged var created_at: NSDate?
  @NSManaged var fields: NSSet?
  @NSManaged var imagePairs: NSOrderedSet?

}

class DocumentContext: NSManagedObjectContext {

  var document: Document!

  convenience init(document: Document? = nil) {
      self.init(concurrencyType: .PrivateQueueConcurrencyType)
      self.parentContext = document?.managedObjectContext ?? NSManagedObject.defaultContext
      self.performBlockAndWait { [unowned self] in
          if let doc = document {
              let id = doc.objectID
              self.document = self.objectWithID(id) as! Document
          } else {
              self.document = Document.create(self)
          }

      }
  }

  override init(concurrencyType ct: NSManagedObjectContextConcurrencyType) {
      super.init(concurrencyType: ct)
  }

  required init?(coder aDecoder: NSCoder) {
      fatalError("init(coder:) has not been implemented")
  }

}

现在奇怪的是,我在viewController内的主线程上有两个调用:

代码语言:javascript
复制
    context.performBlock { [unowned self] in
        let pairs = self.context.document.imagePairs?.array as? [ImagePair]
    }

不久之后

代码语言:javascript
复制
    context.performBlock { [unowned self] in
        let fields = self.context.document.fields
    }

它按预期工作,但当我将最后一个调用更改为performBlockAndWait时,整个应用程序都很好地挂起了。我按下pause,看到这个调用self.context.document.imagePairs?显然被信号量阻塞了,所以它看起来像是被主线程什么的阻塞了。你知道为什么它会在主线程上做一些事情吗?从我的观点来看,它显然应该停留在ManagedObjectContext线程中。

EN

回答 1

Stack Overflow用户

发布于 2016-03-28 19:00:08

好的-就在我按下post按钮的前一秒,我意识到我自己问题的答案))如果有人遇到类似的问题,我会把它留在这里。问题是-我的父上下文是用MainConcurrencyType实例化的。当我的代码开始获取关系时,它正在经历这个上下文,因此我认为是主队列。一旦我将并发类型更改为private,bug就消失了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36260870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档