[英]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)
//...
一次創建context
和entity
(效率更高)並一次保存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.