0

我創建簡單NSBatchUpdateRequest如何通知我的NSFetchedResultsController,我通過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") 
} 

在控制檯上的輸出是:

------------ - 可選(6)

但是我的NSFetchedResultsController w這些管理着同樣的東西,不知道這事變了。如何通知NSFetchedResultsController關於此?

回答

1

首先,你必須改變resultType.UpdatedObjectIDsResultType

bur.resultType = .UpdatedObjectIDsResultType 

一旦執行要求你必須遍歷NSManagedObjectID S和刷新他們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") 
    } 
+0

等待,如果執行讀取和抹去的獲取控制器高速緩存,並執行在相同的上下文中取數據控制器,你爲什麼需要合併的對象,並迫使其故障,並進行批量要求另一個提取?我目前的經驗表明,如果您執行抓取,則會反映出正確的結果。這忽略了我對每個人建議在批量請求中強制執行錯誤的方式感到困惑的事實。如果你正在更新1000條記錄,我懷疑你想要迭代和錯誤1000個對象的性能。 – TheCodingArt

相關問題