无法识别的选择发送到实例[NSCFString subarrayWithRange:]
-
27-09-2019 - |
题
我有以下代码,其产生该错误。我不明白为什么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东西,它没有响应。
如果您在创建临时数组后暂停调试器吧,你怎么看分配给临时?我猜有什么地方不太对劲与任何-keysArray回报。你可能想仔细检查内存如何在任何一个本应返回处理。由名字,我想您的应用程序委托有一个名为“keysArray”作为一个实例变量数组。也许,这不是它的创建或分配时被正确地保留?
其他提示
所以我有这个一个。我做了一件愚蠢的。我分配的UITextView为字符串,而不是它的文本属性。即:
myObj.txtbxThing = [NSString stringWithFormat:@"%@", stuffString];
的代替:
myObj.txtbxThing.text = [NSString stringWithFormat:@"%@", stuffString];
不隶属于 StackOverflow