2009-08-29 3 views
2

Прежде всего, хотя у меня есть понимание некоторых основ, я все еще немного новичок.Заполните UITableView данными

У меня есть секционированный UITableView, в котором я в настоящее время использую NSDictionary (для группировки) и 4 или 5 различных NSArrays (для данных, некоторые из которых передаются следующему представлению при выборе ячейки) для заполнения таблицы. Он работает, но это очень длинный список, и через несколько минут прокрутка UITableView вверх и вниз, оставив это представление и вернувшись к нему, приложение начинает «замедляться» и в конечном итоге замирает. Я занимаюсь некоторыми исследованиями и обнаружил, что способ, которым я занимаюсь, не самый лучший способ. Я прочитал об использовании другого объекта, чтобы заполнить таблицу, которая будет загружать только данные по мере необходимости и не будет хранить эти данные в памяти (что, вероятно, заставляет мое приложение замораживаться).

Может ли кто-нибудь помочь мне в правильном направлении построить «объект данных» для хранения моих данных, а затем использовать его в моем UITableVIew? Могу ли я просто взять NSDictionaries и NSArrays и как-то поместить их в свой класс и назвать этот класс? Я бы использовал Core Data? Любые другие предложения? В качестве примечания, эти данные не могут быть добавлены, обновлены или удалены пользователем. Единственный раз, когда я изменил данные, нужно добавить больше данных (совершенно новую запись), чтобы сделать список длиннее и, возможно, время от времени, но очень редко, обновлялся или удалялся мной.

Любая помощь была бы принята с благодарностью.

+0

Я предполагаю, что это не словари или массивы. Можете ли вы отправить метод cellForRowAtIndexPath: 'из своего контроллера? Возможно, вы неправильно используете ячейки таблицы. – Aaron

ответ

0

Верно, что UITableViewController наиболее эффективен в сочетании с CoreData. Для этого вам нужно посмотреть в NSFetchedResultsController. Если вам нужен простой способ войти в CoreData, используйте MagicalRecord. Он очень прост в использовании и очень эффективен.

Однако стоит отметить, что NSDictionary с несколькими NSArrays, заполненными тысячами NSStrings, не должен вызывать проблем с памятью. Тот факт, что вы можете загрузить это в память, в первую очередь, предполагает, что вы можете хранить всю структуру данных в памяти. Тот факт, что вы замедляете и замерзаете при прокрутке, означает, что проблема с памятью возникает из экземпляра ячейки UITableView.

Вот несколько вещей, которые вы должны проверить:

  1. Вы знаете, как использовать инструменты? Если это так, проверьте наличие утечек памяти.
  2. Вы принимаете didReceiveMemoryWarning в своем UITableViewController? Я так думаю. Но вы хотите быть уверенным, что это не проблема с блокировкой потоков.
  3. Вы используете изображения в своем UITableViewCells? Если у вас тысячи изображений, вы определенно хотите использовать NSCache для его хранения. Это будет автоматически очищать память при необходимости.
  4. Вы используете пользовательские UITableViewCells? Поскольку вы испытываете замедление от прокрутки, убедитесь, что пользовательская ячейка не имеет проблем с рисованием.
  5. Убедитесь, что вы меняете ячейки. Это делается в шаблоне UITableViewController, но вы, возможно, удалили его по какой-то причине.
Смежные вопросы