Основные данные 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 в своем последнем обновлении.

One Solution collect form web for “Основные данные NSFetchedResultsController не обновляется после batchUpadate на устройстве, но нормально на симуляторе”

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

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

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

[context setStalenessInterval: 0];

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

  • Как использовать идентификаторы ограничений в автозапуске и как сменить ограничение с помощью идентификаторов?
  • Делегат не вызывается в SWIFT iOS
  • Связанные структуры и библиотеки в проекте Swift
  • Отключить элементы segue и nav, которые не запускаются после добавления контроллера панели вкладок
  • Неверные ячейки подсчитываются для просмотра коллекции в тестах пользовательского интерфейса.
  • Есть ли способ запустить код при отправке локального уведомления?
  • Как запустить почтовое приложение iOS в Swift?
  • Восстановление состояния iOS11 CoreBluetooth не работает
  • Правильный способ ввода и загрузки изображений из массива в CollectionViewController в Swift
  • Отображение пользовательских изображений iOS MKMapView в верхнем левом углу
  • Как обновить пользовательский интерфейс в фоновом потоке в Swift?
  • Interesting Posts

    В Xcode 7, iOS 9 «Окна приложений, как ожидается, будут иметь контроллер корневого представления в конце запуска приложения»

    Приложение iPhone для обновления экрана при получении телефонного звонка

    iOS локальное уведомление userInfo всегда null

    Объектив C – отвечаетSoSelector для динамических свойств

    Определите, является ли устройство ARM64

    обнаружение длинного нажатия на iPhone

    Почему я получаю неправильный цвет пикселя со следующим кодом?

    Добавление внутренней тени к вершине UIView

    Принудительный просмотр iOS, чтобы не вращаться, но при этом позволяя ребенку вращаться

    No Sound in ios 8 Синтаксический разбор

    Замените клавиатуру iOS7 на выбор даты в TableViewController

    xcode 5 не может видеть NSLog (s) из старого проекта iOS

    Обнаружение, когда символ Unicode не может быть отображен правильно

    MKLocalSearch не дает те же результаты, что и поиск в приложении Apple Maps

    групп и файлов в папках XCode и проектов в Finder

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.