CocoaPods 里的 objc_msgSend

来源:互联网 发布:什么是fft算法 编辑:程序博客网 时间:2024/04/30 17:41

编译一个用到 QuickDialog 的项目,报 "Too Many arguments to function call, expected 0, have 3" 错。

根据 "https://developer.apple.com/library/ios/documentation/General/Conceptual/CocoaTouch64BitGuide/ConvertingYourAppto64-Bit/ConvertingYourAppto64-Bit.html", 倒是简单,只要强制转换成合适的函数原型就可以用了:

int (*action)(id, SEL, int) = (int (*)(id, SEL, int)) objc_msgSend;

不过呢,调用代码是在 pod 项目里,已经锁定不可修改,即使打开锁定,下回刷新pod一下,修改会被冲掉的。

看一眼 objc/message.h ,这是个保护措施,真正的函数原型在 OBJC_OLD_DISPATCH_PROTOTYPES 宏底下。然后就发现了这:Screen Shot 2015-06-12 at 9.27.25 AM

在 pod 项目的 QuickDialog 目标上关掉 "Enable Strict Checking of objc_msgSend Calls" ,搞定。

0 0
原创粉丝点击