Введение
В моем текущем приложении у меня есть UITableView, который содержит пользовательские объекты ячеек.Пользовательские объекты UIViewCellObject просто наследуются от стандартного класса UITableViewCell.Пользовательские ячейки содержат информацию о выполнении фоновых загрузок и обновляют их, например, процент выполненных операций и т. Д.
Пользовательские объекты ячеек прослушивают NSNotification от процессов загрузки, выполняющихся в фоновом режиме, и когда они получают соответствующее уведомлениеони просто обновляют свои собственные элементы управления представлением новой информацией (такой как процент загрузки).
Теперь, когда процесс загрузки завершен, я переупорядочиваю массив активных объектов загрузки и перезагружаю табличное представление следующим образом:
-(void) uploadFinished: (NSNotification*)notification
{
NSDictionary *userInfo = [notification userInfo];
NSNumber *uploadID = [userInfo valueForKey:@"uploadID"];
if (uploadID.integerValue == uploadActivity.uploadID)
{
[[ApplicationActivities getSharedActivities] markUploadAsFinished:uploadActivity];
[parentTable reloadData];
[self setUploadComplete];
}
}
Теперь этот метод имеет место в объектах tableviewcell, и, как вы можете видеть, они вызывают собственный UITableView для перезагрузки данных сразу после сортировки массива.Метод markUploadAsFinished просто переупорядочивает массив, поэтому любая недавно завершенная загрузка помещается вверху, поэтому в UITableView это будет выглядеть следующим образом.
Проблема
Теперь у меня проблема в том, что при вызове этого метода я иногда получаю следующую ошибку: 'NSInvalidArgumentException', причина: '- [CALayer tableView: numberOfRowsInSection:]: нераспознанный селектор отправлен на экземпляр
Я не получаю его все время, иногда весь процесс работает нормально, и завершенные загрузки появляются в начале UItableview, а в другие, казалось бы, случайные моменты временивыходит из строя.Я на самом деле не имею понятия, что здесь происходит.
Пользовательские ячейки загружаются из файла .NIB, как это:
UploadCell *cell = [activeUploadsTable dequeueReusableCellWithIdentifier:@"UploadProgressCell"];
if (cell == nil)
{
[[NSBundle mainBundle] loadNibNamed:@"UploadCellView" owner:self options:nil];
cell = customCell;
}
Есть ли кто-нибудь, кто может иметь представление очто здесь происходит?
РЕДАКТИРОВАТЬ
Прежде всего, я отследил эту ошибку, чтобы появиться прямо в строке, где: reloadData
вызывается внутри пользовательских объектов ячейки.
Кроме того, похоже, что экземпляр, в который он отправляет методы, может измениться.Я только что получил эту ошибку:
'NSInvalidArgumentException', reason: '-[UIScrollViewPanGestureRecognizer tableView:numberOfRowsInSection:]: unrecognized selector sent to instance
Я действительно понятия не имею, что здесь происходит.