我已經成功編寫了下載解析對象的代碼,獲取我數據庫中的當前對象,然後進行比較。與coredata同步解析數據,我如何確定要刪除哪些對象?
我的算法:
我通過解析對象迭代和運行fetchrequest並比較它們的objectID的。如果我什麼都得不到,我爲我的數據庫創建一個新的對象。否則,我再看看我的數據庫中的modifiedDate和解析和比較的updatedAt,看看是否需要設置新值。這段代碼很好用。
代碼:
query.findObjectsInBackgroundWithBlock { (objects, error) -> Void in
if error == nil {
if let objects = objects {
for object in objects {
let object = object as! PFObject
let name = object["name"] as! String
let email = object["email"] as! String
let subjectsTaught = object["subjectsTaught"] as [String: String]
let category = object["category"] as! String
let uniqueID = object.objectId!
let modifiedDate = object.updatedAt!
let fetchRequest2 = NSFetchRequest(entityName: "Teacher")
fetchRequest2.predicate = NSPredicate(format: "uniqueID == %@", uniqueID)
var error2: NSError?
if let foundTeachers = self.managedObjectContext.executeFetchRequest(fetchRequest2, error: &error2) as? [Teacher] {
if foundTeachers.isEmpty == true {
let teacher = NSEntityDescription.insertNewObjectForEntityForName("Teacher", inManagedObjectContext: self.managedObjectContext) as! Teacher
teacher.name = name
teacher.email = email
teacher.subjectsTaught = subjectsTaught
teacher.category = category
teacher.uniqueID = uniqueID
teacher.modifiedDate = modifiedDate
} else {
if let teacher = foundTeachers.first {
let date1 = teacher.modifiedDate
let date2 = modifiedDate
let compareResult = date1.compare(date2)
if compareResult == NSComparisonResult.OrderedAscending {
teacher.setValue(name, forKey: "name")
teacher.setValue(email, forKey: "email")
teacher.setValue(subjectsTaught, forKey: "subjectsTaught")
teacher.setValue(category, forKey: "category")
teacher.setValue(modifiedDate, forKey: "modifiedDate")
}
}
}
}
var error: NSError?
if !self.managedObjectContext.save(&error) {
println("Error \(error)")
abort()
}
}
}
我的問題是如何找出哪些對象,其中不解析?我不想爲我的數據庫中的每個對象查詢解析,因爲我認爲這將是網絡密集型的。
我應該做的所有教師對象fetchrequest在開始的時候,當我通過解析對象迭代,將其刪除,因爲我去?如果我有物品,應該刪除?
只是要小心,你確實檢索你的類的所有對象,即returnedObjects.count <查詢限制 – Tys
可以請你詳細說明,也可以舉個例子,你是如何做這個@Mundi – Tom
@Tom我想解釋是相當完整。你將不得不自己編寫代碼;-)。 – Mundi