2013-03-30 3 views
0

В настоящее время у меня есть следующие настройки в моем приложении:Представление данных подходят для UITableViewDataSource

К примеру, у меня есть gamelist, где игры имеют различные состояния, и я хотел бы определенное состояние, чтобы быть в определенном раздел и т. д.

Поскольку у меня есть 3 разных состояния, я буду использовать NSDictionary с состоянием как ключом и Array как значение и поставить определенную игру с определенным состоянием в правильном массиве.

Тогда мой код numberOfRowsInSection будет что-то вроде:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    NSString* state = [self getStateForSection:section]; 
    return [[obj objectForKey:state] count]; 
} 

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

Я хотел бы иметь все совпадения в одном NSDictionary с matchID как ключом и NSDictionary с значением (совпадением).

Но как бы мне это сделать в UITableView?

Я мог бы сделать что-то, где я верну всеKeys из моего NSDictionary, но мне все равно придется повторять его, чтобы найти свое текущее состояние и добавить свой ключ в соответствующий список?

ответ

3

Вы можете просто также построить NSDictionary от matchID к match на стороне, а также, просто повторно использовать одни и те же объекты и хранение NSDictionaryNSArray из S только для источника данных таблицы. Тогда проблема в том, что вам необходимо обновлять данные при изменении данных. Вы также можете посмотреть в NSArray filteredArrayUsingPredicate:

Другой возможностью является использование другой структуры данных, известной как sorted dictionary, которая хранит свои ключи в определенном порядке. Таким образом, вы можете запросить все значения в виде массива для представления таблицы и получить постоянный порядок, но все же сможете выполнить поиск с помощью matchID непосредственно на match.

+0

Да, хорошо, тогда мне все равно придется пройти через массив, чтобы найти определенное совпадение, когда мне нужно его обновить, хотя я мог бы найти его с фильтром filterArrayUsingPredicate, он, вероятно, все равно будет искать весь массив внутри, так как он не сортирован. – netigger

+0

Если вы поместите экземпляр объекта как в словарь, так и в массив, существует только один экземпляр, поэтому не имеет значения, измените ли вы его из словаря или массива, а другая структура данных будет обновлена. То, что вы могли бы сделать, - это связать каждый матч с «indexPath», поэтому, когда совпадение обновлено, вы можете сказать, что табличное представление перезагружает «indexPath», в противном случае вы перезагружаете целые разделы или всю таблицу для совпадений для обновления на Таблица. Теперь вы в основном начинаете воссоздавать «NSFetchedResultsController» Core Data '' – Ric

+0

О, вы правы, глупые меня :) не думали с точки зрения ссылок :) плохо мог бы дать этот шанс! – netigger

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