Bu hatayı üreten aşağıdaki koda sahibim. SubarrayWithRange iletisinin neden bir dizeye gönderildiğini anlayamıyorum? Açıkça bir dizi olduğunda?Tanınmayan Seçici Gönderilen [NSCFString 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]);
}
Hata:
-[NSCFString subarrayWithRange:]: unrecognized selector sent to instance 0x6b071a0
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: [NSCFString subarrayWithRange:]:
Teşekkür
yaratıldıktan sonra, 'temp' 80 dizelerden oluşan bir dizi, ayıklama araç ipucu yalnızca bu sadece Xcode olup olmadığını emin 10 ürün Değil olsa gösterir mi? Doğru anahtarlarArray, App Delegate'imdeki bir örnek değişkeni (nonatomic, retain) olarak tanımlanan bir özelliktir ve daha sonra sentezlenip “arrayWithContentsOfFile” kolaylık yöntemi kullanılarak atanır. Elimi tutmam gerekmiyor mu? – joec
Evet. Bunu yaratmadın, kolaylık yöntemi yaptı. Bu nedenle, oluşturulduktan sonra etrafta dolaşmasını istiyorsanız, bir hak talebini muhafaza ederek (ya da kendi kopyanızı oluşturarak) hak talebinde bulunmanız gerekir. Bellek yönetimi kurallarına bir bakın. –
Eğer atama yerine mülk erişimcisini kullanırsanız, o zaman muhafazaya ihtiyacınız olmaz; ya da yerine [[NSArray ayırma] initWithContentsOfFile: @ "somepath"] 'diyebilirsiniz. – jlehr