سؤال

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

الرجاء المساعدة في دفعني إلى الجنون

هل كانت مفيدة؟

المحلول

من المفترض أن تكون الوسيطة الأولى لـ NSLog سلسلة تنسيق. أنت تمر nsarray. عندما تحاول الوظيفة التعامل مع صفيفك كسلسلة ، تحصل على هذا الخطأ. بدلا من ذلك ، استخدم NSLog(@"%@", iTunesAristName);.

نصائح أخرى

لقد أجاب تشاك على سؤالك ، لكنني لاحظت شيئًا آخر يمثل مشكلة.

Nsarray هي صفيف ، وليس سلسلة ، لذلك [iTunesArtistName isEqual:@""] لن تعود أبدًا ، لأنها فصول مختلفة. حتى و إن 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);
}

أرى أنك تستخدم regexkitlite ، تأكد من استيراد libicucore.dylib ، كنت أتلقى نفس الخطأ حتى قمت باستيراد تلك المكتبة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top