طول nscfarray]: خطأ ، صفيف regex
-
26-09-2019 - |
سؤال
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 ، كنت أتلقى نفس الخطأ حتى قمت باستيراد تلك المكتبة.
لا تنتمي إلى StackOverflow