Единственная другая опция состоит в том, чтобы сделать вручную, что много систем RDBMS делают так или иначе...
- Создают новую таблицу
, можно тогда скопировать содержание старой таблицы по блоку за один раз. Всегда будучи осторожным из любого ВСТАВЛЯЕТ/ОБНОВЛЯЕТ/УДАЛЯЕТ на исходной таблице. (Мог управляться триггером. Хотя это вызвало бы замедление, это не блокировка...)
Когда-то законченный, измените имя исходной таблицы, затем измените имя новой таблицы. Предпочтительно в транзакции.
Когда-то законченный, перекомпилируйте любые хранимые процедуры, и т.д. то использование та таблица. Планы выполнения, вероятно, больше не будут действительны.
РЕДАКТИРОВАНИЕ:
Некоторые комментарии были сделаны об этом ограничении, являющемся немного плохим. Таким образом, я думал, что поместил новый взгляд на него для показа, почему это - как это...
Вы должны создать другой идентификатор ячейки для двух стилей ячейки:
- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
int feedIndex = [indexPath indexAtPosition:[indexPath length] - 1];
Feed *item = [[[[self selectedButton] category] feedsList] objectAtIndex:feedIndex + 1];
static NSString *CellIdentifier1 = @"Cell1";
static NSString *CellIdentifier2 = @"Cell2";
if(feedIndex == 0) {
MainArticleTableViewCell *cell = (MainArticleTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier1];
if (cell == nil) {
cell = [[[MainArticleTableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier1] autorelease];
[[[cell subviews] objectAtIndex:0] setTag:111];
}
cell.feed = item;
return cell;
}
else {
NewsTableViewCell *cell = (NewsTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier2];
if (cell == nil) {
cell = [[[NewsTableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier2 orientation:currentOrientation] autorelease];
[[[cell subviews] objectAtIndex:0] setTag:111];
}
cell.feed = item;
return cell;
}
return nil;
}
Я не совсем понимаю ваш вопрос, но заметил две любопытные вещи. Если вы используете два разных типа ячеек, вам нужно использовать два разных идентификатора ячеек при вызове dequeueReusableCellWithIdentifier. В настоящее время вы используете один и тот же идентификатор для обоих, что неверно. Попробуйте что-нибудь вроде:
static NSString *MainArticleIdentifier = @"MainArticle";
static NSString *NewsIdentifier = @"News";
Кроме того, я никогда не видел ничего подобного:
int feedIndex = [indexPath indexAtPosition:[indexPath length] - 1];
Почему бы просто не использовать:
int feedIndex = indexPath.row;