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];

我只是不断收到这个错误?

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

请帮助它让我发疯

4

3 回答 3

0

NSLog 的第一个参数应该是格式字符串。你正在传递一个 NSArray。当函数试图将您的数组视为字符串时,您会收到该错误。相反,使用NSLog(@"%@", iTunesAristName);.

于 2010-09-29T19:24:57.360 回答
0

Chuck 已经回答了你的问题,但我注意到其他一些问题。

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);
}
于 2010-09-30T01:57:01.120 回答
0

我看到您正在使用 RegexKitLite,请确保您导入 libicucore.dylib,在导入该库之前我遇到了同样的错误。

于 2012-11-12T05:16:24.873 回答