我有一个iPhone应用程序,我从互联网上下载信息并将其放入NSString
。它工作正常,直到我下载大文件并将其放入一个字符串,然后我得到错误
- [__ NSArrayM长度]:无法识别的选择器发送到实例0x6b6dc60
有一次我遇到EXC_BAD_ACCESS
错误,但现在没有出现。我猜它是一个内存问题,但我不知道如何解决它。字符串变量的大小是否有限制?有什么建议?我还应该提一下,错误有时候并没有出现,但大多数情况下它都会出现。提前谢谢。
答案 0 :(得分:2)
好吧,看起来你试图通过在数组上调用一个名为length
的方法来获取数组的长度,但为了获得数组的长度,你使用count
方法比如这样:
NSInteger numberOfElements = [someArray count];
希望这有帮助!
P.S。存在length
方法,但它在NSString对象上用于获取字符串中的字符数。
---- ----- UPDATE
来自Ray Wenderlich的“My App Crashed, Now What?”教程:
错误消息“无法识别的选择器发送到实例XXX”表示该应用正在尝试调用不存在的方法。
所以在代码的某处,你在NSArray类型的对象上调用length
方法。
您实际上是在NSMutableArray类型的对象上调用length
方法,并且您从错误中知道,因为__NSArrayM
表示NSMutableArray对象;常规的NSArray对象将表示为__NSArrayI
(后缀“M”代表“可变”,后缀“I”代表“不可变”)。
我甚至发现了一个与我的问题非常相似的非常相似的问题:
<强> NSArrayM length : unrecognized selector sent to instance 强>
- 嘿,我之前有这个。你正在做某个地方:[数组长度];但是数组使用“count”,而不是“length”。
答案 1 :(得分:1)
这种情况正在发生,因为您正在尝试将NSMutableArray
转换为NSString
,您只需使用objectAtIndex:0
即可删除此错误。
当我们使用objectAtIndex:0
时,它会返回对象,在您的情况下,该对象就是您的NSString
&amp;因此消除了错误。
e.g。
self.quizTextView.text=[questionTexts objectAtIndex:0];
答案 2 :(得分:0)
尝试启用zombies以获得更好的错误消息。它可能在您预期之前被解除分配。您还可以尝试在“分配”或“泄漏”工具中运行您的应用,以便在您预期之前跟踪对象的发布原因。