Реорганизация uitableview - PullRequest
0 голосов
/ 10 июня 2010

Я столкнулся с той же проблемой, что и описанный в: Сбой при попытке переместить строки UITableView ! Все, что я хочу сделать, - это при определенных операциях перегруппировки вставить новую ячейку или удалить выбранную.

Иногда я получаю:

********* Ошибка подтверждения в - [_ _UITableViewUpdateSupport _setupAnimationForReorderingRow], /SourceCache/UIKit/UIKit-963.10/UITableViewSupport.m:295 Попытка создать две анимации для исключения ячейки

и когда я хочу перезагрузить свои данные, позвонив по номеру [self.tableView reloadData] Я получаю:

********** Завершение работы приложения из-за необработанного исключения «NSRangeException», причина: «*** - [NSCFArray objectAtIndex:]: index (0) за пределами (0)»

Есть ли кто-нибудь, кто знает, как решить эту проблему?

Ответы [ 2 ]

1 голос
/ 11 июня 2010

Привет снова!

Спасибо за вашу помощь! Я действительно нашел решение для моей проблемы!

Меня больше не волнует анимация таблицы при редактировании! Наконец-то я нашел решение в этом посте: Как не дать UITableView moveRowAtIndexPath оставлять пустые строки при переупорядочении

Том Сакстон сказал:

// APPLE_BUG: если вы переместите ячейку в строку, которая находится за пределами экрана (потому что место назначения // был изменен), фиктивная ячейка будет создана и в конечном итоге вызовет сбой

Итак, мой код выглядит так:

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
if( fromIndexPath == toIndexPath ) {
    return;
}

if (toIndexPath.row == [self.data count] -1) { //element has been dragged to the bottom
        self.data removeObjectAtIndex:fromIndexPath.row];
        [self performSelector:@selector(delayedReloadData:) withObject:tableView afterDelay:0];
}
else { //Normal reoder operation
        [self.data removeObjectAtIndex:fromIndexPath.row];
     [self.data insertObject:element atIndex:toIndexPath.row];
}

}

- (void)delayedReloadData:(UITableView *)tableView {
//Assert(tableView == self.tableView);
[self.tableView reloadData];

} * * тысяча двадцать-один

У меня также была утечка памяти в моем методе initData, которую я решил следующим образом:

-(void) initData {
if (!self.data) {
    self.data = [[NSMutableArray alloc] init];
}
else {
    [self.data removeAllObjects];
}

[self.data addObjectsFromArray:[self.fetchedResultsController fetchedObjects]];

}

Спасибо за вашу помощь!

Николай

0 голосов
/ 04 июля 2010

У вас все еще есть утечка памяти в initData.Я предполагаю, что вы определили свои данные как "@property (nonatomic, retain) NSMutableArray * data".Поэтому, когда вы вызываете alloc / init, счетчик сохранения равен 1, а затем вы присваиваете self.data, который выполняет сохранение, давая ему счетчик 2. Вам нужно сделать:

NSMutableArray *ary = [[NSMutableArray alloc] init];
self.data = ary;
[ary release];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...