Длина NSCFArray]: ошибка, регулярное выражение массива - PullRequest
0 голосов
/ 29 сентября 2010
  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];

Я просто получаю эту ошибку?

        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: (

пожалуйста, помогите мне свести меня с ума

Ответы [ 3 ]

0 голосов
/ 30 сентября 2010

Чак ответил на ваш вопрос, но я заметил еще одну проблемную проблему.

NSArray - это массив, а не строка, поэтому [iTunesArtistName isEqual:@""] никогда не вернет true, потому что это разные классы.Даже если iTunesArtistName была строкой, ее следует сравнивать, используя метод isEqualToString:, а не isEqual:.

Если вы хотите извлечь только имя исполнителя, вы можете сделать это:

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 голосов
/ 12 ноября 2012

Я вижу, что вы используете RegexKitLite, убедитесь, что вы импортировали libicucore.dylib, я получал ту же ошибку, пока не импортировал эту библиотеку.

0 голосов
/ 29 сентября 2010

Первый аргумент NSLog должен быть строкой формата.Вы передаете NSArray.Когда функция пытается обработать ваш массив как строку, вы получаете эту ошибку.Вместо этого используйте NSLog(@"%@", iTunesAristName);.

...