0

我有一个 iPhone 应用程序,我从互联网下载信息并将其放入NSString. 它工作正常,直到我下载大文件并将其放入那个字符串中,然后我得到错误

-[__NSArrayM 长度]:无法识别的选择器发送到实例 0x6b6dc60

有一次我遇到了EXC_BAD_ACCESS错误,但现在没有出现。我猜这是一个内存问题,但我不知道如何解决它。字符串变量的大小是否有限制?有什么建议么?我还应该提到,错误有时不会出现,但大多数时候会出现。提前致谢。

4

3 回答 3

2

好吧,看起来您正在尝试通过调用对数组调用的方法length来获取数组的长度,但是要获取数组的长度,您可以使用如下count方法:

NSInteger numberOfElements = [someArray count];

希望这可以帮助!

PS 该length方法存在,但它用于 NSString 对象以获取字符串中的字符数。

- - 更新 - - -

来自 Ray Wenderlich 的“我的应用程序崩溃了,现在该怎么办? ”教程:

错误消息“unrecognized selector sent to instance XXX”表示应用正在尝试调用不存在的方法。

因此,在您的代码中的某处,您正在调用lengthNSArray 类型的对象上的方法。

您实际上是length在 NSMutableArray 类型的对象上调用该方法,并且您从错误中知道这一点,因为它__NSArrayM代表一个 NSMutableArray 对象;一个常规的 NSArray 对象将被表示为__NSArrayI(后缀“​​M”代表“可变”,而后缀“I”代表“不可变”)。

我什至发现了一个与我的答案非常相似的问题:

NSArrayM 长度:发送到实例的无法识别的选择器

  • 呵呵,我以前也有过。您正在执行此操作的某个地方:[数组长度];但数组使用“计数”,而不是“长度”。
于 2012-07-05T00:38:53.987 回答
1

发生这种情况是因为您尝试强制NSMutableArray转换为NSString,您只需使用 即可删除此错误objectAtIndex:0

当我们使用时objectAtIndex:0,它会返回对象,在您的情况下,该对象是您的NSString,因此会消除错误。例如

self.quizTextView.text=[questionTexts objectAtIndex:0];
于 2013-01-19T13:10:39.507 回答
0

尝试打开僵尸以获得更好的错误消息。这可能是在您预期之前被释放的东西。您还可以尝试在“分配”或“泄漏”工具中运行您的应用程序,以追踪为什么您的对象在您预期之前被释放。

于 2012-07-05T00:11:37.277 回答