这与Xcode 5一起编译/工作正常,但是在Xcode 6 Beta 4中导致编译错误:
objc_msgSend(anItem.callback_object,
NSSelectorFromString(anItem.selector), dict);
Run Code Online (Sandbox Code Playgroud)
这是一个第三方组件,所以虽然我有源代码,但它并不是我的代码,我很想改变它(尽管我个人认为'wtf为什么他们使用objc_msgSend??').
带有可能有用细节的图像(错误浏览器中的错误): 
jam*_*rez 115
如果您认为必须这样做是烦人且毫无意义的,您可以通过将"启用严格检查objc_msgSend呼叫"设置为"否"来禁用构建设置中的检查
Vla*_*rov 23
只是为了节省观看WWDC视频,答案是您需要强类型objc_msgSend以便编译器构建它:
typedef void (*send_type)(void*, SEL, void*);
send_type func = (send_type)objc_msgSend;
func(anItem.callback_object, NSSelectorFromString(anItem.selector), dict);
Run Code Online (Sandbox Code Playgroud)
这是直接调用实例方法的另一个示例,如下所示:
IMP methodInstance = [SomeClass instanceMethodForSelector:someSelector];
methodInstance(self, someSelector, someArgument);
Run Code Online (Sandbox Code Playgroud)
对methodInstance使用强类型以使LLVM编译器满意:
typedef void (*send_type)(void*, SEL, void*);
send_type methodInstance = (send_type)[SomeClass instanceMethodForSelector:someSelector];
methodInstance(self, someSelector, someArgument);
Run Code Online (Sandbox Code Playgroud)
不要忘记根据您的特定需求设置send_type的返回和参数类型.
Ale*_*ian 22
我找到了答案,这是2014年WWDC会议第417期"LLVM中的新功能".如果您在第三方库(例如Apsalar)中找到此代码,则更新到最新版本会修复它(可能因为它不是作为lib分发的,哈哈).有关转换这些调用的示例,请参阅THObserversAndBinders库 - 我正在使用它并注意到作者更新了代码,例如:
https://github.com/th-in-gs/THObserversAndBinders/blob/master/THObserversAndBinders/THObserver.m
Mac*_*wic 20
这也可能是由于pod install使用Cocoapods 运行造成的0.36.beta.2.我向CocoaPods报告了这个问题.使用CocoaPods"解决方法"0.35
Maciej Swic是对的.这是在将Cocoapods更新为0.36beta后在Pods中造成的.我通过类型转换objc_msgSend找到了一个简单的解决方法:
id (*typed_msgSend)(id, SEL) = (void *)objc_msgSend;
id<MyProtocol> obJ = typed_msgSend(controller, @selector(myselector));
Run Code Online (Sandbox Code Playgroud)
我在QuickDialog中遇到了这个错误.继james_alvarez的答案,但对于AppCode,转到Project Settings,然后单击QuickDialog项目/共享设置下,向下滚动到ENABLE_STRICT_OBJC_MSGSEND并为调试和发布输入NO.
您也可以使用post install钩子禁用它:
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['ENABLE_STRICT_OBJC_MSGSEND'] = 'NO'
end
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26284 次 |
| 最近记录: |