CocoaPods 里的 objc_msgSend

编译一个用到 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 宏底下。然后就发现了这:

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

你可能感兴趣的:(ios)