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

时间:2012-07-05 00:09:02

标签: iphone xcode nsstring nsurlconnection exc-bad-access

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

  

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

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

3 个答案:

答案 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以获得更好的错误消息。它可能在您预期之前被解除分配。您还可以尝试在“分配”或“泄漏”工具中运行您的应用,以便在您预期之前跟踪对象的发布原因。