2010-09-29 4 views
0
StringReply = [[NSString alloc] initWithData:dataReply encoding:NSUTF8StringEncoding]; 

     //Regex Out Artist Name 
     //NSString *regEx = ; 
     NSArray *iTunesAristName = [stringReply componentsMatchedByRegex: @"(?<=artistname\":\")([^<]+)(?=\")"]; 

     if ([iTunesAristName isEqual:@""]) { 
      NSLog(@"Something has messed up"); 
      //Regex Out Song Name 
      }else{ 
      NSLog(iTunesAristName); 
      } 

     NSLog(iTunesAristName); 
     [stringReply release]; 

Je continue à recevoir cette erreur?NSCFArray length]: erreur, tableau regex

 2010-09-29 21:15:16.406 [2073:207] *** -[NSCFArray length]: unrecognized selector sent to instance 0x4b0b800 
     2010-09-29 21:15:16.406 [2073:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSCFArray length]: unrecognized selector sent to instance 0x4b0b800' 
     2010-09-29 21:15:16.407 [2073:207] Stack: (

s'il vous plaît aider sa me rend fou

Répondre

0

Le premier argument de NSLog est censé être une chaîne de format. Vous passez un NSArray. Lorsque la fonction tente de traiter votre tableau comme une chaîne, vous obtenez cette erreur. Au lieu de cela, utilisez NSLog(@"%@", iTunesAristName);.

+0

Im regarder Chuck atm hehe, de toute façon je ne peux pas récupérer des éléments du tableau que ce soit. – user393273

+0

je ne reçois rien dans le tableau et je suis 2000% sûr que la regex est correcte – user393273

+0

@ user393273: Depuis que vous plantez l'application, j'imagine que la récupération des éléments de la matrice serait impossible. Si vous ne pouvez toujours pas récupérer les éléments lorsque l'application fonctionne correctement, c'est un autre problème. – Chuck

0

Chuck a répondu à votre question, mais j'ai remarqué quelque chose d'autre qui pose problème.

NSArray est un tableau, pas une chaîne, donc [iTunesArtistName isEqual:@""] ne retournera jamais vrai, car ce sont des classes différentes. Même si iTunesArtistName était une chaîne, elle devrait être comparée en utilisant la méthode isEqualToString:, et non isEqual:.

Si vous voulez extraire uniquement le nom de l'artiste, vous pourriez être en mesure de le faire:

NSArray *matches = [stringReply componentsMatchedByRegex: @"(?<=artistname\":\")([^<]+)(?=\")"]; 

if ([matches count] == 0) 
{ 
    NSLog(@"Could not extract the artist name"); 
} 
else 
{ 
    NSString *iTunesArtistName = [matches objectAtIndex:0]; 

    NSLog(@"Artist name: %@", iTunesArtistName); 
} 
0

Je vois que vous utilisez RegexKitLite, assurez-vous d'importer libicucore.dylib, je recevais le même erreur jusqu'à ce que j'ai importé cette bibliothèque.