访问NSManagedObject数组崩溃会生成断言

时间:2017-07-05 07:13:04

标签: ios core-data swift3 xcode8

我正在从核心数据存储中读取一堆对象,当我试图在代码的后期部分从该数组中读取对象时Xcode断言该语句上的错误线程访问。我在方案中添加了-com.apple.CoreData.ConcurrencyDebug 1标志,以找出与核心数据并发相关的问题。当我删除此标志时,一切正常。

以下是我从核心数据存储中读取数据的方法

        let managedContext =
            appDelegate.persistentContainer.newBackgroundContext()

        //setup request to load persons ( cached contacts)
        let fetchRequest =
            NSFetchRequest<NSManagedObject>(entityName: "Person")

        fetchRequest.fetchBatchSize = 20

        //read entties
        managedContext.performAndWait {
            do {
                self.people = try managedContext.fetch(fetchRequest)
                print("\(self.people.count) contacts retrieved from cache(CD)" )
            } catch let error as NSError {
                print("Could not fetch. \(error), \(error.userInfo)")
            }
        }

我正在从代码的其他部分读取数组,如下所示

     let tempContact = self.people[index]

     var property = tempContact.value(forKey: "firstName") as! String

我在上面的第二行得到断言。上面的代码位于我尝试调用的函数中,如下所示

    let appDelegate = UIApplication.shared.delegate as! AppDelegate
    let moc = appDelegate.persistentContainer.viewContext

    let privateMOC = NSManagedObjectContext(concurrencyType: .privateQueueConcurrencyType)
    privateMOC.parent = moc

    privateMOC.perform {
        self.updateChangedContacts()

    }

    self.contactsTableView.reloadData()

如果我直接调用updateChangedContacts它可以正常工作,但如果我有大量的联系人,这个操作将占用很长时间阻止主UI。

我想避免这种情况,我该如何处理?

0 个答案:

没有答案