Я создаю приложение для iPhone, для которого часть интерфейса в точности похожа на раздел «Самый популярный» в приложении iPhone для iPhone.UITableView не будет обновляться должным образом (даже с вызовом reloadData)
Этот раздел «популярный» доступен из бара Tab в нижней части и панель навигации в верхней части содержит UISegmentedControl, чтобы выбрать «Сегодня, на этой неделе, месяц и т.д ..»
Поскольку большинство приложение состоит из UITableViews с ячейками, содержащими очень сходное структурированное содержимое, я создал общий MyAppTableViewController, который наследует UITableViewController. Мой ' популярный' раздел, таким образом, состоит из PopularTableViewController, который наследует MyAppTableViewController. Фактический UITableView находится в пределах MyAppTableViewController.
PopularTableViewController имеет метод:
- (void) segmentChangeTimeframe:(id)sender {
UISegmentedControl *segCtl = sender;
if([segCtl selectedSegmentIndex] == 0)
{
// Call [self parse-xml-method-which-resides-in-MyAppTableViewController]
}
//... ... ...
}
MyAppTableViewController делает использование NSXMLParser и, следовательно, имеет код:
- (void)parserDidEndDocument:(NSXMLParser *)parser {
[self.myTableView reloadData];
}
(Существуют и другие методы, которые обновляет структура данных, из которой представление таблицы получает свои данные)
Я поместил код вывода консоли в методы разбора xml, и при запуске, выбрав разные сегменты, нужно правильно разобрать правильные XML-файлы, и структура данных, похоже, содержит правильные значения.
Проблема в том, что содержимое ячеек таблицы не изменится! ГРР! УБЕДИТЕСЬ! ... Ячейка прокручивается вне поля зрения, а затем возвращается в поле зрения ... ТОГДА изменилось!
Я много раз искал эту проблему, и одно предложение по аналогичной проблеме заключалось в том, чтобы поместить [self.myTableView reloadData] в свой собственный метод, например. myReloadDataMethod, а затем использовать:
[self performSelectorOnMainThread:@selector(myReloadDataMethod) withObject:nil waitUntilDone:NO];
Я попытался поместить код выше в методе parserDidEndDocument и он не сделал абсолютно никакой разницы! Я абсолютно в тупике, и мне интересно, есть ли у кого-нибудь идеи, что здесь происходит.
Update:
Код для заполнения ячеек осуществляется с помощью:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *MyIdentifier = @"MyIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:MyIdentifier] autorelease];
}
// Set up the cell
int itemIndex = [indexPath indexAtPosition: [indexPath length] - 1];
NSString *artistName = [[myItemList objectAtIndex: itemIndex] objectForKey: @"itemA"];
NSString *mixName = [[myItemList objectAtIndex: itemIndex] objectForKey: @"itemB"];
cell.textLabel.text = itemA;
cell.detailTextLabel.text = itemB;
cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;
return cell;
}
Приведенный выше код в MyAppTableViewController который также где myItemList проживает.
вывесить гр оду вы используете для заполнения ваши клетки – Daniel
@Daniel - Я обновил этот вопрос с просьбой. – IAmFledge
Не связано с вашей проблемой, но вы можете получить itemIndex гораздо проще: NSUInteger itemIndex = [indexPath row]. –