swift - 如何通知我的 NSFetchedResultsController 我通过 NSBatchUpdateRequest 更改了一些对象?

标签 swift ios9 nsfetchedresultscontroller nsbatchupdaterequest

我创建了简单的 NSBatchUpdateRequest:

let bur = NSBatchUpdateRequest(entityName: "WLWishlist")
bur.predicate = NSPredicate(format: "name = %@", "oldname")
bur.propertiesToUpdate = ["name": "newname"]
bur.resultType = .UpdatedObjectsCountResultType

然后执行它们:

do {        
    let result = try NSManagedObjectContext.MR_defaultContext().executeRequest(bur) as? NSBatchUpdateResult
    print("------------- \(result!.result)")
} catch {
    print("error")
}

控制台的输出是:

------------- Optional(6)

但是管理相同对象的我的 NSFetchedResultsController 不知道某事已更改。如何通知 NSFetchedResultsController 这件事?

最佳答案

首先,您必须将 resultType 更改为 .UpdatedObjectIDsResultType

    bur.resultType = .UpdatedObjectIDsResultType

执行请求后,您必须遍历 NSManagedObjectID 并在 NSManagedObejctContext 中刷新它们。在此之后,您必须再次 performFetch() 您的 NSFetchedResultsController

    do {

        let result = try context.executeRequest(bur) as? NSBatchUpdateResult
        if let ids = result?.result as? [NSManagedObjectID] {

            for id in ids {
                let object = context.objectWithID(id)
                context.refreshObject(object, mergeChanges: true)
            }
            try fetchedResultsController.performFetch()
        }

    } catch {
        print("error")
    }

关于swift - 如何通知我的 NSFetchedResultsController 我通过 NSBatchUpdateRequest 更改了一些对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33214197/

相关文章:

ios - 通过 Element 属性使 `Collection` 协议(protocol)唯一

ios - 自动检测所有已安装的 map 导航应用程序

ios - 核心图: latest 1. 6版本不包含位码

xcode - 如何在 swift 2 (xcode) 中使用 mapkit 放大某个位置

ios - 根据子 UITableView contentSize Swift 动态设置 UITableViewCell

ios - UITableView 在更新 NSFetchedResultsController 时将滚动保持在正确的位置

ios - Swift 编译器错误 : "Expression too complex" on a string concatenation

swift - 制作按钮超链接Swift

ios - 我的 FetchedResultsController 做错了什么,它给了我设置其委托(delegate)的警告?

swift - 核心数据对多关系导致获取的结果 Controller 崩溃