UITableView не нравится, когда вы даете ему что-то непоследовательное. Если вы измените модель, вам нужно вызвать [tableView reloadData] или, если вы хотите анимировать изменения, вызвать [tableView BeingUpdate] [tableView endUpdate] со всеми операциями вставки / удаления ячеек в середине.
С другой стороны, я не уверен, почему вы здесь делаете:
NSString *identifier = @"cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
if (cell == nil) {
[cell autorelease];
}
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle
reuseIdentifier:@"cell"];
[cell autorelease];
Сначала, если (cell == nil)
, вызов автоматического освобождения для него ничего не даст.
Идентификатор повторного использования - это шаблон с наименьшим весом. Если dequeueReusableCellWithIdentifier:
возвращает nil, это означает, что у него нет объекта ячейки в пуле, и вы должны выделить для него новый. dequeueReusableCellWithIdentifier
также уже возвращает объект автоматического освобождения.
Вместо этого попробуйте это:
NSString *identifier = @"mytweetcell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:identifier] autorelease];
}