У меня есть следующий код, который вызывает эту ошибку. Я не понимаю, почему сообщение subarrayWithRange отправляется в строку? Когда это явно массив?Непризнанный селектор, отправленный в экземпляр [NCRFString 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:]:
Благодаря
После создания 'temp' представляет собой массив из 80 строк, отлаживать подсказка показывает только 10 элементов, хотя не уверен, что это просто Xcode или нет? Вы правы keysArray - это переменная экземпляра в моем делете делегата, свойство, определенное как (неатомное, сохраняемое), а затем синтезированное и назначенное с использованием метода удобства 'arrayWithContentsOfFile'. Мне не нужно сохранять его вручную? – joec
Да. Вы не создали его, метод удобства сделал. Поэтому, если вы хотите, чтобы он придерживался после его создания, вам нужно подать заявку, сохранив (или создав собственную копию). Еще раз взгляните на правила управления памятью. –
Если вы используете свойство accessor вместо назначения, вам не понадобится сохранение; или вы можете вместо этого вызывать '[[NSArray alloc] initWithContentsOfFile: @" somepath "]'. – jlehr