Ho un NSFetchedResultsController
che gestisce la mia origine dati UITableView
.Dati principali NSFetchedResultsController non aggiornato dopo un batchUpadate sul dispositivo ma ok sul simulatore
Sto tentando di modificare una proprietà di NSManagedObject
denominata amountToCompute
utilizzando un NSBatchUpdateRequest
. Così ho creato l'aggiornamento batch:
let batchUpdate = NSBatchUpdateRequest(entityName: "MyEntity")
batchUpdate.propertiesToUpdate = ["amountToCompute" : newAmount]
batchUpdate.resultType = .UpdatedObjectIDsResultType
I eseguirlo:
var batchError: NSError?
let batchResult = managedContext.executeRequest(batchUpdate, error: &batchError) as! NSBatchUpdateResult?
e per aggiornare il mio contesto gestito corrente, aggiorno ogni managedObject nel managedContext ed eseguire una nuova fetch fetchedResultsController
:
Ho implementato alcuni metodi del delegato NSFetchedResultsControllerDelegate
per gestire le modifiche nei risultati inviati dallo NSFetchedResultsController
:
func controllerWillChangeContent(controller: NSFetchedResultsController) {
tableView.beginUpdates()
}
func controller(controller: NSFetchedResultsController, didChangeObject anObject: AnyObject, atIndexPath indexPath: NSIndexPath?, forChangeType type: NSFetchedResultsChangeType, newIndexPath: NSIndexPath?) {
switch type {
...
case .Update:
reloadRowsAtIndexPaths([indexPath!], animation: reloadRowsWithAnimation)
let myManagedObject = anObject as! MyManagedObject
println("update : \(myManagedObject.amountToCompute)")
...
}
}
func controllerDidChangeContent(controller: NSFetchedResultsController) {
tableView.endUpdates()
}
Corro l'app sul mio simulatore 8.4 su iOS e tutto va bene. println("update : \(myManagedObject.amountToCompute)")
stampa il nuovo valore.
Corro l'app sul mio iPhone 6 8.4.1 e il valore non è aggiornato, println("update : \(myManagedObject.amountToCompute)")
stampa il vecchio valore. Il nuovo valore viene salvato correttamente, ma le modifiche non vengono visualizzate nella visualizzazione tabella mentre vengono eseguite sul simulatore.
Cosa c'è che non va? Come mai può essere diverso se sono sul simulatore o sul mio dispositivo. Le versioni non sono esattamente le stesse, ma dubito che Apple abbia toccato l'architettura Core Data nel loro ultimo aggiornamento.
Sul dispositivo, si ottiene un tipo di modifica di spostamento ('NSFetchedResultsChangeMove')? – quellish
No, nemmeno sul simulatore. – Nico