2017-01-08 47 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