2013-01-03 2 views
0

Правильно, поэтому мой UITableView загружает и помещает все ячейки в алфавитном порядке. Затем информация загружается с сервера, и вычисления выполняются, когда TableView перезагружается, когда все будет завершено. В настоящее время это довольно простая процедура: как только информация загружается с сервера, ячейки даже не перемещаются, они остаются в алфавитном порядке. Ничего действительно не происходит, кроме половины заполненной информации, и небольшие изменения производятся в зависимости от расчетов. Мне было интересно, есть ли простой способ помещать ячейки в секции в зависимости от расчетов, сделанных после завершения загрузки? У меня возникла идея создать 4 массива (будет только 4 раздела), и после того, как isLoading установлен на no, изменение источника данных TableView для создания разделов, однако, это немного звучит ... iffy. Я знаю, что это теоретический вопрос, в отличие от проблемы с кодированием, но прежде чем я пойду и испортил свой код, в том, что обязательно будет глупо неэффективным способом делать вещи, есть простой способ «назначить» UITableViewCells для разделов ?Сортировка ячеек в UITableView в разделы после загрузки TableView

Моя основная проблема заключается в том, что если пользователь удалит ячейку, удаление соответствующей записи в Core Data будет немного сложнее и подвержено ошибкам. Это привело меня к другой идее. Что делать, если я добавил дополнительный атрибут к объекту Core Data. Этот атрибут будет назначен, а затем сохранен после выполнения вычислений. Проблема заключается в том, что никакие существующие базы данных не будут работать. Должен быть аккуратный способ достижения этого.

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

+0

Можете ли вы прояснить проблему, связанную с добавлением атрибута в Core Data и с проблемами с БД после? – Bill

+0

@Bill Хорошо, мое приложение уже было распространено несколько. Добавление другого атрибута приведет к несовместимости с тем, кто использовал приложение, а это значит, что им придется переустанавливать приложение, я прав? – Mackey18

+0

В этом смысле, да. В идеале вы можете использовать API для своей базы данных, чтобы обновления не вызывали проблем. – Bill

ответ

1

Вы должны быть в порядке, если вы применяете методы источника данных, относящиеся к разделам.

Например:

  • numberOfSectionsInTableView
  • sectionIndexTitlesForTableView.

Каждый раз, когда данные таблицы перезагружаются (например, [self.tableView reloadData]), эти методы будут вызываться и данные будут помещены в их разделы.

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

Что касается удаления записей при использовании Core Data, я предлагаю взглянуть на NSFetchedResultsController. Последний будет отслеживать любые изменения в данных вашей таблицы и сообщать своему делегату, вашему контроллеру табличных представлений, когда будут сделаны обновления.

Например, удаление должно начинаться с вызова делегата представления таблицы, как обычно (т. Е. Через tableView: didEndEditingRowAtIndexPath). В последнем случае вы удаляете запись из основных данных (например, [self.myDatabase.managedObjectContext deleteObject: entity]). Предполагая, что вы инициировали NSFetchedResultsController с тем же контекстом управляемого объекта, удаление будет автоматически отражено обратно вашему пользователю.

Если вы используете удаленный БД, вам также необходимо выполнить сохранение (однако вы его внедрили), чтобы обеспечить обновление базы данных.

Обратите также внимание, что если вы используете NSFetchedResultsController, вам не нужно использовать методы источника данных раздела, поскольку NSFetchedResultsController может справиться с этим для вас.Просто определите ключевой путь в вашей модели данных, который вернет имя раздела при инициализации NSFetchedResultsController.

+0

Спасибо, Билл! В настоящее время я использую NSFetchedResultsController, он принимает во внимание разделы? то есть что-то в разделе 2 позиции 1, фактически может быть первой записью, загруженной из основных данных. Если удалено, это все равно удалит правильную запись или NSFetchedResultsController - немой метод? – Mackey18

+1

Да, NSFetchedResultsController принимает дополнительный ключ-путь для возврата имени раздела. Взгляните на эту [ссылку] (http://developer.apple.com/library/ios/#documentation/CoreData/Reference/NSFetchedResultsController_Class/Reference/Reference.html). В частности, initWithFetchRequest: managedObjectContext: sectionNameKeyPath: cacheName. – Bill

+0

Еще раз спасибо Билл. Теперь подумайте об этом. Я уже использую NSFRC, но из того, что я могу сказать, нет никакого способа использовать NSFRC для достижения того, что я хочу, не делая другого атрибута для моего объекта. Я прав? В этом случае я должен был бы сделать это через делегата TableView, что означает, что удаление из Core Data будет более сложным. Если я ошибаюсь, скажите об этом. Я довольно новичок в этом! – Mackey18

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