ВведенияIOS - Получение странных ошибок: непризнанный селектор направил к экземпляру на UITableView
В моем текущем приложении у меня есть UITableView, который хранит объекты пользовательских ячеек. Пользовательские UIViewCellObjects просто подклассифицированы из стандартного класса UITableViewCell. Пользовательские ячейки хранят информацию о запуске загрузки фона и обновляют их такими вещами, как процент выполнения и т. Д.
Пользовательские объекты ячейки прослушивают NSNotifications из процессов загрузки, выполняющихся в фоновом режиме, и когда они получают соответствующее уведомление, они просто обновляют свои собственные элементы управления представлением с помощью новой информации (например, процента загрузки).
Теперь, когда процесс загрузки будет сделано, я повторно заказать массив активных объектов загрузки и перезагрузки TableView так:
-(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;
}
есть кто-нибудь, кто мог бы иметь понятия о том, что здесь происходит?
EDIT
Прежде всего, я разыскал эту ошибку появляться прямо на линии, где: reloadData
называется внутри объектов пользовательских ячеек.
Кроме того, кажется, что экземпляр, который он отправляет, может измениться. Я тоже получил эту ошибку:
'NSInvalidArgumentException', reason: '-[UIScrollViewPanGestureRecognizer tableView:numberOfRowsInSection:]: unrecognized selector sent to instance
Я действительно не знаю, что здесь происходит.
Где вы устанавливаете 'dataSource' вашего вида таблицы? Кажется, что он установлен на экземпляр 'CALayer', когда он терпит неудачу. –
Источник данных tableview установлен в файле .nib с именем «ActiveUploads». Этот .nib-файл просто содержит UIView, содержащий сам UItableview. Затем UITableView datasource + delegate устанавливается владельцем файлов .nib-файла, а владелец файла - UIViewController, который обрабатывает созданное вами выше. – CodingBeagle
Вы запустили с включенными зомби? –