2015-09-07 35 views
2

這是我NSBatchUpdateRequestNSBatchUpdateRequest引發錯誤斯威夫特

let batchUpdateRequest = NSBatchUpdateRequest(entityName: "WLItem") 
    batchUpdateRequest.predicate = NSPredicate(format: "source != rt") 
    batchUpdateRequest.propertiesToUpdate = ["position": 2] 
    batchUpdateRequest.resultType = NSBatchUpdateRequestResultType.UpdatedObjectsCountResultType 

    do { 
     let batchUpdateResult = try NSManagedObjectContext.MR_defaultContext().executeRequest(batchUpdateRequest) as! NSBatchUpdateResult 
    } catch { 
     print("error: \(error)") 
    } 

在控制檯輸出爲:

error: NilError

有什麼不對?這是XCode7的問題嗎?我正在與NSBatchUpdateRequest第一次合作,所以我不知道之前是否是這樣。對我來說,代碼應該可以工作。

+1

您是否找到解決方案?我看到完全相同的問題。 –

回答

0

同樣的問題,我在我的項目中遇到過。下面的解決方案爲我工作。試試這個

 let batchRequest = NSBatchUpdateRequest(entityName: "Card") 
     let predicate = NSPredicate(format: "set == %@", set) 

     batchRequest.predicate = predicate 
     batchRequest.propertiesToUpdate = [ "count" : 54 ] 

     batchRequest.resultType = .UpdatedObjectsCountResultType 
     do { 
      try self.managedObjectContext.executeRequest(batchRequest) as! NSBatchUpdateResult 
     } catch _ { 
     } 
0

你必須刷新managedContextObject來更新數據庫。我創建了一個使用NSBatchUpdateRequest更新數據庫的函數。以下是功能: -

let managedContext = SharedInstance.appDelegate?.persistentContainer.viewContext 


func updateDataFromTable(tableName:String, idOfPaticularTable ID:String, updatedDict:Dictionary<String, String>, success:@escaping (_ response:Bool)-> Void, failure:@escaping (_ error: Error?) -> Void) { 

    let batchRequest = NSBatchUpdateRequest(entityName: tableName) 
    let predicate = NSPredicate(format: "id == %@", ID) 

    batchRequest.predicate = predicate 
    batchRequest.propertiesToUpdate = updatedDict 

    batchRequest.resultType = .updatedObjectIDsResultType 
    do { 
     // Execute Batch Request 
     let batchUpdateResult = try managedContext?.execute(batchRequest) as! NSBatchUpdateResult 

     // Extract Object IDs 
     let objectIDs = batchUpdateResult.result as! [NSManagedObjectID] 

     for objectID in objectIDs { 
      // Turn Managed Objects into Faults 
      let managedObject = managedContext?.object(with: objectID) 
      managedContext?.refresh(managedObject!, mergeChanges: false) 
     } 
     success(true) 
    } catch let error as NSError { 
     print(error) 
     failure(error) 
    } 
} 

struct SharedInstance { 

    static let appDelegate = UIApplication.shared.delegate as? AppDelegate 

    static let employeetable = "EmployeeModel" 
}