我有一个 iPhone 应用程序,我从互联网下载信息并将其放入NSString
. 它工作正常,直到我下载大文件并将其放入那个字符串中,然后我得到错误
-[__NSArrayM 长度]:无法识别的选择器发送到实例 0x6b6dc60
有一次我遇到了EXC_BAD_ACCESS
错误,但现在没有出现。我猜这是一个内存问题,但我不知道如何解决它。字符串变量的大小是否有限制?有什么建议么?我还应该提到,错误有时不会出现,但大多数时候会出现。提前致谢。
我有一个 iPhone 应用程序,我从互联网下载信息并将其放入NSString
. 它工作正常,直到我下载大文件并将其放入那个字符串中,然后我得到错误
-[__NSArrayM 长度]:无法识别的选择器发送到实例 0x6b6dc60
有一次我遇到了EXC_BAD_ACCESS
错误,但现在没有出现。我猜这是一个内存问题,但我不知道如何解决它。字符串变量的大小是否有限制?有什么建议么?我还应该提到,错误有时不会出现,但大多数时候会出现。提前致谢。
好吧,看起来您正在尝试通过调用对数组调用的方法length
来获取数组的长度,但是要获取数组的长度,您可以使用如下count
方法:
NSInteger numberOfElements = [someArray count];
希望这可以帮助!
PS 该length
方法存在,但它用于 NSString 对象以获取字符串中的字符数。
- - 更新 - - -
来自 Ray Wenderlich 的“我的应用程序崩溃了,现在该怎么办? ”教程:
错误消息“unrecognized selector sent to instance XXX”表示应用正在尝试调用不存在的方法。
因此,在您的代码中的某处,您正在调用length
NSArray 类型的对象上的方法。
您实际上是length
在 NSMutableArray 类型的对象上调用该方法,并且您从错误中知道这一点,因为它__NSArrayM
代表一个 NSMutableArray 对象;一个常规的 NSArray 对象将被表示为__NSArrayI
(后缀“M”代表“可变”,而后缀“I”代表“不可变”)。
我什至发现了一个与我的答案非常相似的问题:
- 呵呵,我以前也有过。您正在执行此操作的某个地方:[数组长度];但数组使用“计数”,而不是“长度”。
发生这种情况是因为您尝试强制NSMutableArray
转换为NSString
,您只需使用 即可删除此错误objectAtIndex:0
。
当我们使用时objectAtIndex:0
,它会返回对象,在您的情况下,该对象是您的NSString
,因此会消除错误。例如
self.quizTextView.text=[questionTexts objectAtIndex:0];
尝试打开僵尸以获得更好的错误消息。这可能是在您预期之前被释放的东西。您还可以尝试在“分配”或“泄漏”工具中运行您的应用程序,以追踪为什么您的对象在您预期之前被释放。