簡體   English   中英

向CoreData添加數據需要很多時間

[英]adding data to CoreData takes lot time

//添加核心數據的代碼。 有2000個聯系人要添加。 但是添加2000條數據需要45秒。

func addData(contacts: [CNContact]) {
    for data in contacts {
         let context = appDelegate.persistentContainer.viewContext
        let entity = NSEntityDescription.entity(forEntityName: entityName, in: context)
        let newUser = NSManagedObject(entity: entity!, insertInto: context)
        newUser.setValue(data.identifier, forKey: "contactIdentifier")
        newUser.setValue(data.familyName, forKey: "finalName")
        newUser.setValue(data.givenName, forKey: "givenName")
        newUser.setValue(data.phoneNumbers.first?.value.value(forKey: "stringValue") as? String ?? "", forKey: "phoneNumber")
        do {
            try context.save()
        } catch {
            UIUtility.showErrorAlert("", message: Constants.errorMessage)
        }
    }

}

首先將此行移到循環之前,因為您只需要執行一次

let context = appDelegate.persistentContainer.viewContext

然后將以下兩行替換為

let newUser = NSEntityDescription.insertNewObject(forEntityName entityName, into: context)

因此,函數的開始應如下所示

let context = appDelegate.persistentContainer.viewContext
for data in contacts {
    let newUser = NSEntityDescription.insertNewObject(forEntityName entityName, into: context)
    //...

一次創建contextentity (效率更高)並一次保存context (效率更高)肯定更快。

func addData(contacts: [CNContact]) {
    let context = appDelegate.persistentContainer.viewContext
    let entity = NSEntityDescription.entity(forEntityName: entityName, in: context)!
    for data in contacts {
        let newUser = NSManagedObject(entity: entity, insertInto: context)
        newUser.setValue(data.identifier, forKey: "contactIdentifier")
        newUser.setValue(data.familyName, forKey: "finalName")
        newUser.setValue(data.givenName, forKey: "givenName")
        newUser.setValue(data.phoneNumbers.first?.value.value(forKey: "stringValue") as? String ?? "", forKey: "phoneNumber")
    }
    do {
       try context.save()
    } catch {
       UIUtility.showErrorAlert("", message: Constants.errorMessage)
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM