- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在使用 NSBatchDeleteRequest 后从 NSFetchedResultsControllerDelegate 获取准确更新时遇到问题,更改作为更新类型而不是 didChange 委托(delegate)方法上的删除类型出现。有没有办法让更改以删除的形式出现? (对于删除和更新,我有不同的方案)。
删除请求:(使用调用者提供的私有(private)上下文)
fileprivate class func deletePeopleWith(ids: Set<Int>, usingContext context: NSManagedObjectContext) {
let fr: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest(entityName: "Person")
var predicates: [NSPredicate] = []
ids.forEach {
predicates.append(NSPredicate(format: "id = %ld", $0))
}
fr.predicate = NSCompoundPredicate(orPredicateWithSubpredicates: predicates)
let dr = NSBatchDeleteRequest(fetchRequest: fr)
dr.affectedStores = context.parent?.persistentStoreCoordinator?.persistentStores
do {
try context.parent?.execute(dr)
context.parent?.refreshAllObjects()
print("Deleting person")
} catch let error as NSError {
let desc = "Could not delete person with batch delete request, with error: \(error.localizedDescription)"
debugPrint(desc)
}
}
结果:
func controller(_ controller: NSFetchedResultsController<NSFetchRequestResult>, didChange anObject: Any, at indexPath: IndexPath?, for type: NSFetchedResultsChangeType, newIndexPath: IndexPath?) {
DispatchQueue.main.async {
let changeDesc = "Have change with indexPath of: \(indexPath), new index path of: \(newIndexPath) for object: \(anObject)"
var changeType = ""
switch type {
case .delete:
changeType = "delete"
case .insert:
changeType = "insert"
case .move:
changeType = "move"
case .update:
changeType = "update"
}
print(changeDesc)
print(changeType)
}
}
打印:
Have change with indexPath of: Optional([0, 0]), new index path of: Optional([0, 0]) for object: *my core data object*
update
最佳答案
来自 Apple 的 documentation :
Batch deletes run faster than deleting the Core Data entities yourself in code because they operate in the persistent store itself, at the SQL level. As part of this difference, the changes enacted on the persistent store are not reflected in the objects that are currently in memory.
After a batch delete has been executed, remove any objects in memory that have been deleted from the persistent store.
参见 Updating Your Application After Execution用于处理被 NSBatchDeleteRequest
删除的对象的部分。
关于ios - 使用带 NSBatchDeleteRequest 的 NSFetchedResultsController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40575339/
我正在编写一个 OS X 应用程序,它需要能够删除其核心数据存储中保存的所有“SongEntity”实例。但是,当我尝试执行 NSBatchDeleteRequest 时,我的应用程序崩溃,控制台输出
我有一个应用程序,它将与服务器同步,其中的数据每天都会更改。在同步期间,我删除了某些实体的所有数据并使用新数据重新加载。我正在使用以下代码: func SyncronizeUserCommen
我对 NSBatchDeleteRequest 有问题,似乎无法删除关系引用。 我有两个实体: 新闻 类别 其中一个类别可以有多个新闻。 现在,当我尝试使用 NSBatchDeleteRequest
我的 CoreData 模型有两个子实体“CarA”和“CarB”,它们具有相同的抽象父实体“Car”。 我正在尝试使用删除所有 CarA 对象 func deleteObjects(enti
我正在阅读 Delete/Reset all entries in Core Data? . 如果我按照以下步骤操作,我会得到意想不到的结果: 调用下面的代码 然后在模拟器中查询一个实体,我会得到一个
在我的应用程序中,当我从网络服务刷新实体的内容时,我删除了核心数据中的所有记录并插入了所有新记录。但是,很多时候记录并没有从上下文中删除,即使我再次调用上下文也是如此。因此,当我保存时,旧的仍然存在,
使用 swift 2.1 和 CoreData,我想删除数据库中的所有数据。 按照下面的方式,效果很好 let context = (UIApplication.sharedApplication()
我有以下代码。 let workorderFetchRequest = NSFetchRequest(entityName: "Workorders") let d
我在 Core Data 中看到过很多关于批量删除的问题,但似乎没有一个能解决我的问题。 我正在使用 Core Data 创建一个 iOS 9/Swift 应用程序。在今年的 WWDC 上,我参加了核
我正在尝试使用 NSBatchDeleteRequest 删除一堆实体,其中许多实体都有删除级联和/或无效规则。 我第一次尝试删除任何内容失败,并且返回的 NSError 包含字符串“批量删除不支持删
NSFetchRequest *request = [Report fetchRequest]; request.predicate = [NSPredicate predicateWithForma
如何使用带有 NSPredicate 的 NSBatchDeleteRequest 从 CoreData 中删除行。 我想删除超过 30 天的记录。 我不想获取内存中的所有数据,而是比较和删除,我想使
我在使用 NSBatchDeleteRequest 后从 NSFetchedResultsControllerDelegate 获取准确更新时遇到问题,更改作为更新类型而不是 didChange 委托
我目前正在对一个与 Core Data 交互的层进行单元测试。它保存、删除和更新 Item目的。但是,我的测试试图保存几个 Item s 然后执行批量删除一直失败。 这是Item : extensio
我有一些执行批量删除请求的核心: extension NSManagedObject: Clearable { /// Clears all objects of this type in c
我遇到了这个问题 'NSBatchDeleteRequest' is only available on iOS 9.0 or newer class func delete(placeId:Int6
所以,将我的代码迁移到 Swift 3 让我有点卡住了。似乎 NSBatchDeleteRequest 现在需要 iOS 10?我可以构建代码的唯一方法是使用以下代码片段: func removeAl
我是一名优秀的程序员,十分优秀!