2012-03-21 2 views
0

Я работаю с hpple HTML Parser здесь: https://github.com/topfunky/hppleреализация Hpple/Непризнанный селектор

Для тестирования функции я добавил его в простой проект, и я в состоянии собрать и открыть имитатор без ошибок, но при он вызывается, я получаю непризнанную ошибку выбора.

//THIS ACTION SET TO RUN WITH THE PUSH OF A BUTTON 

- (IBAction)parseElements{ 

NSString *urlRequest = item.link; 

NSLog(@"urlRequest defined."); 

NSData *htmlData = [NSString stringWithContentsOfURL:[NSURL URLWithString: urlRequest] encoding:NSUTF8StringEncoding error:nil]; 

NSLog(@"htmlData created."); 

TFHpple *xpathParser = [[TFHpple alloc] initWithHTMLData:htmlData]; 

NSLog(@"xpathParser made."); 

NSString *queriedItem = @"[@class='title']"; 

// THE APP FAILS WHILE TRYING TO EXECUTE THE NEXT LINE 

NSArray *elements = [xpathParser searchWithXPathQuery:queriedItem]; 

NSLog(@"elements searched."); 

TFHppleElement *element = [elements objectAtIndex:0]; 

NSLog(@"element recalled."); 

NSString *storyTitle = [element content]; 

NSLog(@"The title of the story is: %@", storyTitle); 

} 

В NSLogs удается отобразить через "xpathParser сделал", а затем я получаю это непризнанное сообщение селектора:

- [__ NSCFString байт]: непризнанный селектор направлен например 0x6a52d60

* Завершение приложения из-за неперехваченного исключения «NSInvalidArgumentException», причина: '- [__ NSCFString bytes]: непризнанный селектор, отправленный в экземпляр 0x6a52d60'

* Первый стек бросить вызов: (0x16c8052 0x1859d0a 0x16c9ced 0x162ef00 0x162ece2 0x495c 0x352e 0x2e3f 0x16c9ec9 0x1395c2 0x13955a 0x1deb76 0x1df03f 0x1de2fe 0x15ea30 0x15ec56 0x145384 0x138aa9 0x15b2fa9 0x169c1c5 0x1601022 0x15ff90a 0x15fedb4 0x15feccb 0x15b1879 0x15b193e 0x136a9b 0x2658 0x25b5) Terminate называется бросать исключение

Я понимаю, что это не нравится SOMETHING, но что вызывает глюк или дополнительные рамки/импорт, необходимые для правильного выполнения? В его нынешнем виде UIKit, viewcontroller.h и TFHpple.h устанавливаются как единственный импорт в этом файле.

ответ

1

Вот ваша проблема:

NSData *htmlData = [NSString stringWithContentsOfURL:[NSURL URLWithString: urlRequest] encoding:NSUTF8StringEncoding error:nil]; 

TFHpple *xpathParser = [[TFHpple alloc] initWithHTMLData:htmlData]; 

TFHpple «s initWithHTMLData предполагается принять NSData. Вы объявляете htmlDataNSData, но фактическим объектом, который вы назначаете ему, является NSString.

Это должно исправить:

NSData *htmlData = [NSData dataWithContentsOfURL:[NSURL URLWithString: urlRequest]]; 
+0

Спасибо! Теперь я разбился в другой области ... и головоломка мозга продолжается. Признайте объяснение, и я обязательно буду помнить, что буду использовать NSData в следующий раз. –

+0

Мое удовольствие. Остальная часть кода, который вы вставили выше, выглядит отлично. Кроме того, строка, которую я предложил вам исправить, должен был вызывать предупреждение. Всегда полезно исправить все это, особенно если ваша программа рушится. P.S. Не стесняйтесь принять мой ответ, нажав на галочку :) – yuji

Смежные вопросы