تم إرسال المحدد غير المعترف به إلى المثال [NSCFString SubarrayWithRange:

StackOverflow https://stackoverflow.com/questions/3858515

سؤال

لدي الرمز التالي الذي ينتج هذا الخطأ. لا أستطيع أن أفهم لماذا يتم إرسال رسالة subarraywithrange إلى سلسلة؟ عندما يكون من الواضح أن صفيف؟

static const int kItemsPerView = 20;
NSRange rangeForView = NSMakeRange( page * kItemsPerView, kItemsPerView );

NSMutableArray *temp = [[APP_DELEGATE keysArray] mutableCopyWithZone:NULL]; 
NSArray *itemsForView = [temp subarrayWithRange:rangeForView];

for (int loopCounter = 0;loopCounter < r*c;loopCounter++){
    NSLog(@"%i: %@ ", loopCounter, [itemsForView objectAtIndex:loopCounter]);
}

خطأ:

-[NSCFString subarrayWithRange:]: unrecognized selector sent to instance 0x6b071a0
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: [NSCFString subarrayWithRange:]:

شكرًا

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

المحلول

هذه الأنواع من الأخطاء عادة ما تكون مرتبطة بإدارة الذاكرة. في الأساس ، تقوم بإرسال رسالة إلى عنوان يشغله الآن بعض الأشياء الأخرى لأن الشاغل السابق قد اختفى بشكل غير متوقع. نظرًا لأن مساحة العنوان هذه يمكن أن تشغلها أي شيء ، فأنت فقط تطلب من NSCFString شيئًا لا يستجيب إليه.

إذا توقفت عن تصحيح الأخطاء مباشرة بعد إنشاء صفيف temp ، فما الذي تراه مخصصًا لـ Temp؟ أظن أن شيئًا ما ليس صحيحًا تمامًا مع أي شيء يعود. قد ترغب في التحقق من كيفية التعامل مع الذاكرة في كل ما من المفترض أن تعود. بالاسم ، أفترض أن مندوب التطبيق الخاص بك لديه صفيف يسمى "KeySarray" كمتغير مثيل. ربما لا يتم الاحتفاظ بها بشكل صحيح عند إنشائها أو تعيينها؟

نصائح أخرى

لذلك كان لدي هذا واحد. لقد فعلت شيئًا غبيًا. قمت بتعيين UITextView إلى سلسلة بدلاً من خاصية نصية. بمعنى آخر:

myObj.txtbxThing = [NSString stringWithFormat:@"%@", stuffString];

بدلاً من:

myObj.txtbxThing.text = [NSString stringWithFormat:@"%@", stuffString];
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top