【问题标题】:What does the “unrecognized selector sent to instance” error mean?“无法识别的选择器发送到实例”错误是什么意思?
【发布时间】:2011-03-01 09:32:47
【问题描述】:

由于以下错误,我的应用程序崩溃了:

-[NSCFString count]: unrecognized selector sent to instance 0x612b060

谁能告诉我这是什么意思以及如何在我的代码中找到引用 0x612b060 的行

【问题讨论】:

标签: objective-c objective-c-runtime


【解决方案1】:

您正在对已释放或尚未初始化的对象(可能是集合,例如数组、字典或集合)调用 count 方法。

【讨论】:

    【解决方案2】:

    您在 NSCFString 上发送消息“count”,意思是在 NSString 数据类型上调用“count”方法。

    要查找代码,您可以使用堆栈跟踪,但我确定您正在做的是:

    在 NSArray 或(Array 数据类型)上分配 NSString 数据并尝试计数。

    【讨论】:

      【解决方案3】:

      这很可能是因为您有一个未正确保留的集合对象(例如 NSArray、NSDictionary)。

      尝试使用 NSZombies 找到被释放的对象。

      1. 右键单击 Xcode 中可执行文件组中的可执行文件。选择Get Info
      2. 选择参数选项卡。
      3. Variables to be set in the environment 中创建一个名为NSZombieEnabled 的变量并将其值设置为YES。不要忘记激活它。
      4. 打开断点并运行您的代码。
      5. 调试器会将您指向提前释放的对象。

      调试完此问题后,您应该停用 NSZombies。 NSZombies 不会释放任何内存,它只是将对象标记为已释放。
      因此,您迟早会收到内存警告。
      您可以简单地删除它前面的复选标记来停用 NSZombies。

      【讨论】:

        【解决方案4】:

        您的意思是在您的字符串上调用length 吗?

        【讨论】:

          【解决方案5】:

          也许有人会需要这个: 当我遇到这种问题时,我使用: [ myarray retain];myarray = [NSArray arrayWithObjects: ...]; 它奏效了。我认为这是因为我的阵列过早地破坏了自己。 但我不知道我现在怎样才能释放这个对象? 只是[myarray autorelease]?有什么相反的东西可以保留吗?

          【讨论】:

          • 欢迎来到 StackOverflow。你答案的最后一部分是一个问题。请使用主页上的 按钮。否则社区将看不到您的问题。
          • retain 的反义词是releaseautorelease 负责调用 release 以获取当前自动释放池的保留对象。
          【解决方案6】:

          一个实际的例子:

          有时,有一个我还不清楚的实际区别。 valueForKey 在 SOGo-3.1.4 的代码中不起作用,试图在 context 对象上调用不可用的“方法”ASProtocolVersion

          `EXCEPTION: <NSException: 0x55f43f93e4d0> NAME:NSInvalidArgumentException REASON:-[WOContext ASProtocolVersion]: unrecognized selector sent to instance
          

          objectForKey 有效(并且是在代码中的其他位置查询context 对象的常用方法)。

          https://github.com/inverse-inc/sogo/pull/217/files

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-04-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-04-19
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多