我有下面的代码是产生此错误。我不明白为什么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