"Selector no reconocido enviado a instancia" al crear NSDictionary con tweets

Estoy buscando Twitter para tweets con este código:

- (void)fetchTweets { NSURL *url = [NSURL URLWithString:@"http://search.twitter.com/search.json"]; NSDictionary *params = [NSDictionary dictionaryWithObject:@"#winning" forKey:@"q"]; TWRequest *request = [[TWRequest alloc] initWithURL:url parameters:params requestMethod:TWRequestMethodGET]; [request performRequestWithHandler: ^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) { if (responseData) { NSError *jsonError; tweets = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&jsonError]; if (tweets) { // NSLog(@"%@", tweets); } else { NSLog(@"%@", jsonError); } } [[self delegate] receivedTweets]; }]; [self performSelector:@selector(fetchTweets) withObject:nil afterDelay:30]; 

La variable tweets es un NSArray y estoy intentando ponerlo en un NSDictionary con este código:

 NSDictionary *tweet = [[TwitterHandler shanetworkingInstance].tweets objectAtIndex:indexPath.row]; 

Definitivamente estoy recibiendo el text JSON para los tweets, pero cuando trato de agregarlos al dictionary para poder eventualmente ponerlos en una tabla, obtengo el error "selector no reconocido enviado a la instancia".

No estoy seguro de por qué obtengo esto y cualquier ayuda sería apreciada.

En este codigo:

  if (responseData) { NSError *jsonError; tweets = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&jsonError]; if (tweets) { // NSLog(@"%@", tweets); } else { NSLog(@"%@", jsonError); } 

¿Los tweets los mismos que obtienes con este código?

 [[TwitterHandler shanetworkingInstance].tweets 

Si es así, me parece que lo está asignando a un object autoelevado, por lo que finalmente se liberará y terminará con un puntero a un object liberado.

Mejor reténgalo o use una propiedad retenida cuando la asigne.

Algo como

 tweets = [[NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&jsonError] retain]; 

o, suponiendo que los tweets son una retención o propiedad:

 self.tweets = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&jsonError]; 

No olvides lanzarlo cuando ya no sea necesario (al less en el dealloc de tu class)

EDITAR

Ok, aquí está la cosa, y no tiene nada que ver con la gestión de la memory (¡conjetura inicial equivocada!): Probé su URL y vuelve:

 {"error":"You must enter a query."} 

Que es un dictionary JSon. Entonces el JSON Parser lo identifica como un dictionary y le devuelve un dictionary. Puede almacenarlo en un NSArray *, pero el object instanciado sigue siendo un dictionary, y solo responderá a los methods NSDictionary. Como su comentario muestra cuando lo imprime, imprime un dictionary.

Tuve esto una vez y fue la aplicación que soltó el controller de vista, comtesting si tu controller de vista se está lanzando.

 [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&jsonError]; 

Esto devuelve un object NSDictionary de los tweets. Los resultados de búsqueda de Twitter de esa URL se pueden filtrar buscando el contenido en los results key.

AKA:

 NSDictionary *jsonTweet = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&jsonError]; NSArray *tweet = [jsonTweet objectForKey:@"results"]; 

Entonces, los tweets pueden ser iterados ya que están en un NSArray.