2017-01-08 80 views
1

我想確認是否在覈心數據中的所有數據已經​​以下列源中刪除(其中「CoreDataHelper.getCoreDataHelper()。上下文」的NSManagedObjectContext)如何確認核心數據執行

public static func delete(predicates: [NSPredicate] = []) { 
    let fetchRequest = request(predicates: predicates) 
    let deleteRequest = NSBatchDeleteRequest(fetchRequest: fetchRequest) 
    do { 
     let result1 = try CoreDataHelper.getCoreDataHelper().context.fetch(fetchRequest) 
     NSLog("Delete batch size: %d", result1.count) 
     let result2 = try CoreDataHelper.getCoreDataHelper().context.execute(deleteRequest) 
     NSLog("Delete request succeeded: %d", result2) 
    } catch { 
     NSLog("Delete request failed") 
     return 
    } 
} 

當我1個

刪除請求成功:250432

測試它,以下是日誌

刪除批量大小所示

但是當我真正看到數據時,似乎沒有被刪除。 我嘗試添加一個數據,如下所示,數據已經存在於核心數據中。

public static func add(from object: Dictionary<String, Any>) -> NSManagedObjectProtocol? { 
    let exists = fetch(id: object) 
    if exists.count > 0 { 
     NSLog("Object already exists in CoreData : %@", object.description) 
     return nil 
    } else { 
     return newObject(object: object) as NSManagedObjectProtocol 
    } 
} 

對象已存在於CoreData:....

所以我的問題是我怎麼知道NSBatchDeleteRequest的是執行功能工作正常。是否有返回值可以用來確認執行過程中是否有錯誤?

回答

1

保存您的NSManagedContext刪除後:

public static func delete(predicates: [NSPredicate] = []) { 
    let fetchRequest = request(predicates: predicates) 
    let deleteRequest = NSBatchDeleteRequest(fetchRequest: fetchRequest) 
    do { 
     ... 
     let result2 = try CoreDataHelper.getCoreDataHelper().context.execute(deleteRequest) 
     //save context 
     try CoreDataHelper.getCoreDataHelper().context.save() 
    } catch { 
     NSLog("Delete request failed") 
     return 
    } 
} 
+0

是不是真的,上下文不必在每次刪除請求可以得救?無論保存操作如何,核心數據都應能夠知道數據的狀態。 –

+0

順便說一下,一些測試用例成功地刪除了數據,但有些則沒有。所以我仍然需要知道刪除的結果是否成功,或者至少知道有多少行受到影響。 –

+0

我們需要更多地瞭解您的Core Data Stack以進一步提高。 – shallowThought