1

Ошибка читается Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[MObject objectAtIndex:]: unrecognized selector sent to instance. Таким образом, я получаю от этого то, что экземпляр MObject (подкласс NSObject) получает сообщение objectAtIndex:, которое оно не предназначено для обработки.Как я могу устранить эту ошибку «непризнанный селектор, отправленный на экземпляр»?

Ошибка возникает, когда я нажимаю на строку таблицы, чтобы перейти к ее подробному представлению, которое состоит из UIWebView detailWebView. Код для didSelectRowAtIndexPath выглядит следующим образом:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
MObjectDetailVC *mObjectDetailVC = [[MObjectDetailVC alloc] initWithNibName:@"MObjectDetailVC" bundle:nil]; 
mObjectDetailVC.detailURL = [[NSURL alloc] initWithString:[[[mcData objectAtIndex:indexPath.section] objectAtIndex:indexPath.row] url]]; 
mObjectDetailVC.title = [[[mcData objectAtIndex:indexPath.section] objectAtIndex:indexPath.row] name]; 
[self.navigationController pushViewController:mObjectDetailVC animated:YES]; 
[mObjectDetailVC release]; 
} 

Это занимает свойство выбранного экземпляра MObject NSString url и превратить его в NSURL для контроллера представления детали, которая просто делает основной [detailWebView loadRequest:[NSURLRequest requestWithURL:detailURL]].

Если у вас есть предложения, я буду рад их услышать. И если вам нужна дополнительная информация, пожалуйста, дайте мне знать.

+0

Какова структура 'mcData'? Действительно NSArray NSArray? – kennytm

+0

'mcData' - это' NSArray', состоящий из кучи 'MObject'. Итак, вместо каждого элемента, являющегося «NSObject» внутри массива, каждый должен быть «NSArray» внутри массива? – scojac

ответ

1

Посмотрите на структуру mcData. Он и его члены, как ожидается, будут NSArrays в соответствии с вашим кодом, убедитесь, что они есть.

+0

'mcData' - это' NSArray', состоящий из кучи 'MObject'. Итак, вы имеете в виду, что вместо каждого элемента, являющегося «NSObject» внутри массива, каждый должен быть «NSArray» внутри массива? – scojac

+0

способ написания кода, это то, что ожидается, да. см. строку '[[mcData objectAtIndex: indexPath.section] objectAtIndex: indexPath.row]', она ожидает массив в массиве. –

+0

Хм, это не то, что я намеревался. Как я могу изменить его так, чтобы он не искал вложенный массив, а просто взял «url» и «name» из выбранного объекта? Или это возможно? – scojac

0

objectAtIndex: определен на NSArray. Если класс MObject является подклассом NSObject, то он не будет определять метод objectAtIndex:, что и говорит об ошибке.

Оба следующие вызовы приведут к сбою:

mObjectDetailVC.detailURL = [[NSURL alloc] initWithString:[[[mcData objectAtIndex:indexPath.section] objectAtIndex:indexPath.row] url]]; 
mObjectDetailVC.title = [[[mcData objectAtIndex:indexPath.section] objectAtIndex:indexPath.row] name]; 

Убедитесь, что оба mcData и [mcData objectAtIndex:indexPath.section] возвращают объект из NSArray или его подкласса.

0

Вы можете поставить галочку, чтобы предотвратить аварию через respondsToSelector:

Вы можете прочитать на http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Protocols/NSObject_Protocol/Reference/NSObject.html

Положив чек до прохождения конкретного сообщения поможет вам избежать аварии.