我遇到了核心數據的謂詞方法問題,因爲它在返回的結果中似乎有點不一致。我有一個從Web API填充的「用戶」實體,而不是刪除所有條目,然後下載和添加用戶,我傾向於將所有用戶的標誌設置爲「isModified」爲false,然後通過API下載用戶並根據用戶是否在商店中更新或添加用戶,在添加/更新時設置「isModified」標誌。最後,代碼刪除沒有設置「isModified」標誌的用戶。我這樣做是因爲如果Web API不可用,我不會失去所有用戶,應用程序可以繼續工作。swift 2核心數據謂詞不一致
我遇到的問題是刪除未設置其「isModified」標誌的用戶的方法是刪除已更新的用戶!
這裏的方法:
func deleteUsersNotUpdated() -> Bool {
// default result
var result = false
// setup the fetch request
let fetchRequest = NSFetchRequest(entityName: "Users")
// set a predicate that filters only records with updated set to false
fetchRequest.predicate = NSPredicate(format: "isModified == %@", false)
do {
let fetchResults = try self.managedObjectContext.executeFetchRequest(fetchRequest) as! [NSManagedObject]
for user in fetchResults {
print("Deleting \(user)")
self.managedObjectContext.deleteObject(user)
try self.managedObjectContext.save()
}
result = true
} catch let error as NSError {
print("\(error)")
}
return result
}
的方法大多是工作,但間歇性地將刪除用戶沒有很好的理由,即即使它有「isModified」標誌設置,例如這裏是該行的輸出:打印(「刪除(用戶)」)
Deleting <NSManagedObject: 0x7b6d6ec0> (entity: Users; id: 0x7b64abd0 <x-coredata://1A7606EB-3539-4E85-BE1C-15C722AD7125/Users/p14> ; data: {
created = "2016-01-17 16:54:21 +0000";
familyName = Doe;
givenName = John;
isModified = 1;
pin = 3932;
type = STAFF;
})
正如你所看到的,「isModified」標誌十分肯定地設置,但謂語應該只選擇有記錄標誌重置(false)。
上面的方法是我創建的類的一部分,它基本上是Users實體的CRUD類。
抓我的頭在這裏! 如果需要,我可以提供其餘的代碼。
近足以給出線索,使我能夠解決問題:-)在從Web API抓取數據的dataTaskWithUrl方法的關閉中,我需要在dispatch_async(dispatch_get_main_queue()中包裝「保存數據到核心數據」代碼),{<保存到核心數據在這裏>}) - 謝謝! – Paul