升级到 Xcode 4.2/iOS 5 后,类别中的方法引发异常

Posted

技术标签:

【中文标题】升级到 Xcode 4.2/iOS 5 后,类别中的方法引发异常【英文标题】:Method from a category throws an exception after upgrade to Xcode 4.2/iOS 5 【发布时间】:2011-10-14 06:02:55 【问题描述】:

我有一个使用 shuffle 方法扩展 NSMutableArray 的类别。该类别在.h 文件中声明和实现,该文件包含在.pch 文件中。在 ios 3.xx 和 4.xx 上运行良好。 我昨天安装了 Xcode 4.2。将基础 SDK 设置为 5.0 并将部署目标设置为 3.2 的重新编译应用抛出 -[__NSArrayM shuffle]: unrecognized selector sent to instance ...

我试过 iPhone 5.0 模拟器、iPad 5.0 模拟器、iPhone 4G 和 iOS 5 - 没有区别。

现在,如果我将声明/实现移至.m,在该处实现发送shuffle 消息的类,则应用程序运行良好。 原来的.h 确实被导入了——如果我只是将代码从原来的.h 复制到.m,编译器会抱怨重复声明。

【问题讨论】:

【参考方案1】:

升级到 Xcode 4.2 导致编译器从 GCC 更改为 Apple LLVM。而且 LLVM 不喜欢在 .pch 中实现。将实现解压成.m文件,直接导入原.h,用GCC编译都可以解决问题。

【讨论】:

最后,关于我遇到的问题的一些信息。但是我尝试了这个答案,它仍然没有用!任何的想法?我要拔头发了…… 我最终将我的实现保留在 pch 中,并使用公共方法创建了一个 NSOBject。暂时有效

以上是关于升级到 Xcode 4.2/iOS 5 后,类别中的方法引发异常的主要内容,如果未能解决你的问题,请参考以下文章

iTunes 同步中的未知错误 0xE8003FFE(Xcode 4.2、iOS SDK 5.0、iPod 第二代 iOS 4.2.1)

升级到 Xcode 3.2.5 后“缺少基本 SDK”

升级到 Xcode 5.1 后 Xcode Bot 失败

升级到 Xcode 8 后出现 GCC 5.4 链接器错误

Xcode 4.2 iOS程序如何给按钮等添加点击后的代码

升级到 Xcode 5 后,objc_msgSend 在哪里?