Основные данные NSFetchedResultsController не обновляется после batchUpadate на устройстве, но нормально на симуляторе

У меня есть NSFetchedResultsController который управляет моим источником данных UITableView .

Я пытаюсь изменить свойство NSManagedObject под названием amountToCompute используя NSBatchUpdateRequest . Поэтому я создаю пакетное обновление:

 let batchUpdate = NSBatchUpdateRequest(entityName: "MyEntity") batchUpdate.propertiesToUpdate = ["amountToCompute" : newAmount] batchUpdate.resultType = .UpdatedObjectIDsResultType 

Я выполняю его:

 var batchError: NSError? let batchResult = managedContext.executeRequest(batchUpdate, error: &batchError) as! NSBatchUpdateResult? 

И чтобы обновить текущий управляемый контекст, я обновляю каждый управляемый объект в управляемом контенте и выполняю новый fetchedResultsController :

 if let result = batchResult { let objectIDs = result.result as! [NSManagedObjectID] for objectID in objectIDs { let managedObject: NSManagedObject = managedContext.objectWithID(objectID) if !managedObject.fault { managedContext.refreshObject(managedObject, mergeChanges: true) } if !fetchedResultsController.performFetch(&error) { println("error: + \(error?.localizedDescription), \(error!.userInfo)") } } } 

Я NSFetchedResultsControllerDelegate некоторые методы делегата NSFetchedResultsControllerDelegate для управления изменениями в результатах, отправленных 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() } 

Я запускаю приложение на своем симуляторе 8.4 iOS, и все идет хорошо. println("update : \(myManagedObject.amountToCompute)") печатает новое значение.

Я запускаю приложение на своем iPhone 6 8.4.1, и значение не обновляется, println("update : \(myManagedObject.amountToCompute)") печатает старое значение. Новое значение сохраняется правильно, но изменения не отображаются в моем представлении таблицы, пока они работают на симуляторе.

Что не так? Почему это может быть иначе, будь я на симуляторе или на моем устройстве. Версии не совсем то же самое, но я сомневаюсь, что Apple коснулась архитектуры Core Data в своем последнем обновлении.

Это необычная, но известная проблема, с которой я столкнулся с собой и провел пару дней, вытаскивая свои волосы, пока не нашел этот пост в блоге, который работал на меня.

https://stevenpsmith.wordpress.com/2011/08/12/nsfetchedresultscontroller-and-core-data-managed-object-updates/

Он сводился к добавлению этой единственной строки кода, которая установила нулевой интервал непрерывности:

[context setStalenessInterval: 0];

Если я правильно прочитаю ваш пост, у вас будет такая же проблема. 🙂

  • Как настроить тройные операторы в Swift
  • Как переопределить инициализатор UIView в Swift 1.0
  • Получить начальную точку UIBezierPath
  • Неоднозначная ссылка на участника 'Int.init'
  • Swift - доступ к окну AppDelegate из viewController
  • Конкатенация строки в Swift
  • Приложение iPhone только отклонено для того, чтобы не работать на iPad
  • Передача данных с помощью разматывания
  • Когда инициировать пользовательский просмотр в подклассе UITableViewCell?
  • «неожиданно найдено нуль» для поиска в UITableView
  • UISearchController - панель поиска должна быть видимой всегда
  • Interesting Posts

    Блоки, стеки и кучи

    Должен ли popViewController вызываться из родительского или дочернего ViewController?

    Что означает этот аварийный журнал Swift iPad?

    Аутентификация запросов с iPhone с помощью API-интерфейса Framework

    Применить фильтр к AVCaptureSession, сохраняя невидимый слой предварительного просмотра

    «Больше, чем максимум 5 фильтрованных альбомов, пытающихся зарегистрироваться. Это не удастся ». Using AssetsLibrary

    Сафари iOS 6, setInterval не запускается

    CAEmitterCell не учитывает значение продолжительности

    Навигационная панель мигает черным при выполнении popViewController

    Элемент панели управления, не отображаемый в навигацииBar

    iOS broswer data -> Cache & Cookie для приложения / сеанса Phonegap?

    Как подклассифицировать UINavigationController с пользовательским заголовком или UINavigationBar?

    Установить свойство представления UIViewController в пользовательский класс UIView без раскадровки / наконечника

    Неопределенные символы для архитектуры x86_64 iOS swift

    Подвижность управления в иерархии зрения в iOS

    Давайте будем гением компьютера.