7

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

谢谢

4

2 回答 2

29

这些类型的错误通常与内存管理有关。本质上,您正在向一个地址发送消息,该地址现在已被其他对象占用,因为之前的占用者意外消失了。由于该地址空间可能被任何东西占用,您只是碰巧向 NSCFString 询问它没有响应的东西。

如果您在创建 temp 数组后立即暂停调试器,您会看到分配给 temp 的什么?我猜 -keysArray 返回的东西不太对劲。您可能需要仔细检查应该返回的内存是如何处理的。顾名思义,我想您的应用程序委托有一个名为“keysArray”的数组作为实例变量。也许在创建或分配时没有正确保留?

于 2010-10-04T19:47:53.377 回答
5

所以我有了这个。我做了一件愚蠢的事。我将 UITextView 分配给了一个字符串,而不是它的 text 属性。IE:

myObj.txtbxThing = [NSString stringWithFormat:@"%@", stuffString];

代替:

myObj.txtbxThing.text = [NSString stringWithFormat:@"%@", stuffString];
于 2012-04-02T00:43:24.690 回答