我有下面的代碼是產生此錯誤。我不明白爲什麼subarrayWithRange消息被髮送到一個字符串?當它明確是一個數組?無法識別的選擇器發送到實例[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]);
}
錯誤:
-[NSCFString subarrayWithRange:]: unrecognized selector sent to instance 0x6b071a0
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: [NSCFString subarrayWithRange:]:
感謝
創建之後,'temp'是80個字符串數組,調試工具提示只顯示10個確保項目雖不如果這僅僅是Xcode的或不?你是正確的keysArray是我的App Delegate中的一個實例變量,一個屬性定義爲(nonatomic,retain),然後使用一個方便的方法'arrayWithContentsOfFile'來合成和分配。我不需要手動保留它嗎? – joec 2010-10-04 20:15:26
是的。你沒有創造它,便利的方法。因此,如果您希望它在創建後繼續存在,則需要保留索賠(或創建自己的副本)。再看看內存管理規則。 – 2010-10-04 20:29:30
如果您使用屬性訪問器而不是分配,那麼您將不需要保留;或者,你可以調用'[[NSArray alloc] initWithContentsOfFile:@「somepath」]'。 – jlehr 2010-10-04 20:58:24