2016-05-16 2 views
2

Я пытаюсь преобразовать представление таблицы в представление коллекции. У меня он отображает ячейки в порядке, но любые внесенные в них изменения не отображаются до тех пор, пока я не оставлю представление/не вернусь или не прокручу ячейку с экрана. Данные поступают из основных данныхОбновление uicollectionview при изменении основного объекта данных

Первая ячейка обновляется правильно, но другие ячейки нет. Если я снова обновляюсь, они обновляются, но только до значения предыдущего обновления. Я могу видеть, функция обновления вызывается, но настроить ячейка не вызывается на самом деле обновить содержимое, только на первой ячейке

Полный код здесь: http://pastebin.com/BDaVS6vq

Результаты nslogs дают

// Посмотреть начальную загрузку 2016-05-18 15: 03: 38.012 Calona [1304: 315892] 3. Домашнее животное: Необязательно («Горох») - Опыт: Необязательно (2000) 2016-05-18 15:03 : 38.022 Calona [1304: 315892] 3. Домашнее животное: Необязательно («Squi») - Exp: Дополнительно (2000) 2016-05-18 15: 03: 38.033 Calona [1304: 315892] 3. Домашнее животное: "Шепот Light") - Exp: Необязательно (2000)

// После первого обновления 2016-05-18 15: 06: 12,686 Calona [1309: 316804] 1. Pet Пользователь: Дополнительно ("Горох") 2016-05-18 15: 06: 12.698 Calona [1309: 316804] 2. Обновление 2016-05-18 15: 06: 12.705 Calona [1309: 316804] 3. Домашнее животное: Необязательно («Горох») - Exp: Необязательно (4000) 2016-05-18 15: 06: 12.710 Calona [1309: 316804] 3. Домашнее животное: дополнительно («Squi») - Exp: дополнительно (3000) 2016-05-18 15: 06: 12.714 Calona [ 1309: 316804] 3. Домашнее животное: по желанию («Шепот Свет») - Exp: Дополнительно (3000) 2016-05-18 15: 06: 12.725 Calona [1309: 316804] 1. Пользователь Pet: Дополнительно («Squi»)) 2016-05-18 15: 06: 12.732 Calona [1309: 316804] 2. Обновление 2016-05-18 15: 06: 12.737 Calona [1309: 316804] 1. Пользователь Pet: Дополнительно («Whisper Light») 2016-05-18 15: 06: 12.742 Calona [1309: 316804] 2. Обновление 2016-05-18 15: 06: 12.895 Calona [1309: 316804] 2. Обновление 2016-05-18 15: 06: 12.895 Calona [1309: 316804] 2. Обновление

После второго обновления 2016-05-18 15: 06: 26.903 Calona [1309: 316804] 1. Пользователь Pet: Необязательный («Горох») 2016-05-18 15: 06: 26.918 Calona [1309: 316804] 2. Обновление 2016-05-18 15: 06: 26.924 Calona [1309: 316804] 3. Pet: Необязательно («Горох») - Exp: Дополнительно (5000) 2016-05-18 15: 06: 26.931 Calona [1309: 316804] 3. Домашнее животное: Дополнительно («Squi») - Exp: Необязательно (4000) 2016-05-18 15: 06: 26.936 Calona [1309: 316804] 3. Домашнее животное: необязательно («Whisper Light ") - Exp: Дополнительно (4000) 2016-05-18 15: 06: 26.945 Calona [1309: 316804] 1. Пользователь Pet: Дополнительно (« Squi ») 2016-05-18 15: 06: 26.952 Calona [1309: 316804] 2. Обновление 2016-05-18 15: 06: 26.958 Calona [1309: 316804] 1. Пользователь Pet: Дополнительно («Whisper Light») 2016-05-18 15: 06: 26.962 Calona [1309: 316804] 2. Обновление 2016-05-18 15: 06: 27.045 Calona [1309: 316804] 2. Обновление 2016-05-18 15: 06: 27.047 Calona [1309: 316804] 2. Обновление 2016- 05-18 15: 06: 27.048 Calona [1309: 316804] 2.Обновление

+0

Можете ли вы подтвердить, что вы достигаете заявление этого 'если пусть результаты = условие fetchedResultsController.fetchedObjects'? – Laffen

+0

Да, эта строка в порядке, и все в пределах, если идет вперед –

+0

Это может быть проблема с потоком (вы используете NSBlockOperation, который использует очередь с высоким приоритетом, но вам нужно отправить dispas_async с основной очередью) – kholl

ответ

0

Вполне возможно, что отсутствуют эти строки в viewDidLoad вашего ViewController:

self.collectionView.dataSource = self; 
self.collectionView.delegate = self; 

и попытаться использовать:

func controllerDidChangeContent(controller: NSFetchedResultsController) { 
    self.collectionView.performBatchUpdates({() -> Void in 
     self?.blockOperation.start(); 
     }, completion: { (success) -> Void in 
      ... 
    }) 
} 

и я также определил:

func controllerWillChangeContent(controller: NSFetchedResultsController) { 
    self.blockOperation = NSBlockOperation(); 
} 
+0

свой набор в IB. Данные заселяются в ячейки, просто не обновляются при изменении основного объекта данных. –

+0

Хорошо, но вы также назначили делегат? Однако я обновил свой код. – ciccioska

+0

Да, делегат настроен. Проблема связана с контроллером func (контроллер: NSFetchedResultsController, didChangeObject anObject: AnyObject, atIndexPath indexPath: NSIndexPath ?, forChangeType type: NSFetchedResultsChangeType, newIndexPath: NSIndexPath?) На данный момент. Вызывается метод, но ни один из параметров в коммутаторе не запускается, и если я печатаю тип, я получаю «NSFetchedResultsChangeType», который не соответствует параметрам коммутатора. –

Смежные вопросы