0

ОбзорIOS - основные данные - UITableView - обновление расчетное значение - NSFetchedResultsController

  • У меня есть проект IOS с использованием основных данных (NSFetchedResultsController) и вид таблицы. У меня есть поле под названием «joingDate».

  • У меня есть набор меток на ячейке представления таблицы для представления данных.

  • Если joiningDate сегодня/завтра, то я бы хотел отображать как «сегодня» или «завтра» вместо указания фактической даты.

  • Я просто думал, что я бы проверял lastCheckedDate (в последний раз, когда дата была проверена), и если бы это произошло в течение дня, мне пришлось бы обновлять все эти метки в строках, которые имеют дату присоединения и "сегодня или завтра".

  • В базе данных «JoiningDate» будет храниться как дата, только метка должна отображать «сегодня»/«завтра»/дату в определенном формате.

Я реализовал следующий метод, в котором метка «joingDateComments» обновляется на основе текущей даты.

- (UITableViewCell *)tableView:(UITableView *)tableView 
     cellForRowAtIndexPath:(NSIndexPath *)indexPath 

Вопрос

Примечание - Я использую NSFetchedResultsController

  1. , что это лучший подход, чтобы обновить все те строки, ярлыки, которые имеют joiningDate как сегодня/завтра?
  2. Должен ли я перезагружать все записи в таблице? (но это повлияет только на несколько строк.)
  3. Должен ли я прокручивать все индексы и проверять и обновлять. Я не уверен, что это сработает, потому что я использую NSFetchedResultsController.
  4. Должен ли я использовать временные данные, чтобы я мог просто запросить базу данных и получить записи, имеющие «JoingDate», как сегодня/завтра, и обновить поле переходных процессов JoingDateComments, чтобы эти записи автоматически обновлялись NSFetchedResultsController

Ответ:

Pls пройти через комментарии Эндрю.

ответ

2

user1046037,

Это действительно не вопрос основных данных, но вопрос UITableView. Большинство из них обрабатывается в методе -tableView:cellForRowAtIndexPath:. Там вы выберете, как вы представляете ячейку. Другое место будет, когда NSFetchedResultsController вызовет вас с измененными объектами. (Стандартный контрольный контроллер таблицы данных Core Data записывает эту панель для вас.) Другими словами, вам не нужно будет перебирать все ваши объекты. Если вы хотите более тонкое управление зерном, когда эти ячейки обновляются, вы можете прослушивать уведомление о сохранении. Затем запросите tableView для массива видимых ячеек. Затем можно использовать пути индекса ячейки, чтобы обновить содержимое ячейки.

Andrew

+0

спасибо, Андрей, что вы сказали, имеет смысл. Единственная проблема, с которой я столкнулся, заключалась в том, что «joiningDate» хранится в базе данных, и когда я хочу отобразить ячейку, я проверяю, есть ли она вчера/сегодня/завтра и предоставляет соответствующие комментарии, но текущая дата продолжает меняться и в какой-то момент, его необходимо обновить. Теперь я занимаюсь домашним заданием, чтобы проверить записи, которые необходимо обновить, обратившись к базе данных, когда приложение запустится/появится на этом экране с другого экрана. У меня есть отдельное поле в базе данных для представления типа даты (сегодня/завтра/вчера) – user1046037

+0

user1046037, опять же это не имеет ничего общего с Core Data. Он имеет все, что связано с поиском видимых ячеек таблицы и обновлением указателя дня. Почему вы сохраняете формат вашей строки даты, сегодня/завтра/вчера, в своей модели? Сравнение с NSDate.date - это все, что вам нужно. Вы знаете, MVC и все такое ... Я думаю, что вы делаете эту проблему сложнее, чем нужно. BTW, iOS отправит вам уведомление, когда произойдёт значительное изменение времени. Вы можете использовать это, чтобы инициировать обновление своего пользовательского интерфейса. Andrew – adonoho

+0

спасибо Andrew, Если я не храню в базе данных, как бы я узнал, какие ячейки отображаются неверной строкой. Если вы не храните его в базе данных, я должен выполнить полную перезагрузку всех данных. Итак, теперь я храню записи, которые имеют ярлык как «вчера»/«сегодня»/«завтра», поэтому я могу их запросить и обновить, когда день прошел вместе с записями, которые находятся между вчерашним днем ​​и днем ​​послезавтра. Что касается уведомлений. Каждое приложение имеет только 64 слота и, в большинстве случаев, достигает предела, поэтому я не хочу использовать уведомление. – user1046037

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