升级到 Xcode 5 后,objc_msgSend 在哪里?
Posted
技术标签:
【中文标题】升级到 Xcode 5 后,objc_msgSend 在哪里?【英文标题】:Where is objc_msgSend once you upgrade to Xcode 5? 【发布时间】:2013-09-24 15:31:36 【问题描述】:这段代码昨天还在工作:
id urlNSString = objc_msgSend(objc_getClass("NSString"), sel_registerName("stringWithUTF8String:"), "http://zmangames.com/product-details.php?id=1246");
objc_msgSend(objc_getClass("EAGLView"), sel_registerName("openURL:"), urlNSString);
我刚刚升级到 Xcode 5,现在它说该函数未定义。我在做
#include <objc/message.h>
#include <objc/objc.h>
#include <objc/runtime.h>
这似乎在 /usr/include/objc 中,并且似乎包含函数的定义。整个项目我没有收到任何其他投诉。
Codesense 表示定义如下所示:
OBJC_EXPORT id objc_msgSend(id self, SEL op, ...) __OSX_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);
【问题讨论】:
为什么你需要这样做而不是写普通的Objective-C代码? 我在.cpp文件中,并且Obj-C编译器没有激活。 他可能在写 c 或 c++ 看来你可以写Objective-C++代码什么的……嗯嗯。 【参考方案1】:改用#import <objc/runtime.h>
。
【讨论】:
【参考方案2】:知道了。没有足够仔细地检查错误。
Candidate function not viable: no known conversion from 'Class' (aka 'objc_class *') to 'id' (aka 'objc_object *') for 1st argument
只需要将 objc_getClass 的返回值从 Class
转换为 id
,如下所示:
id urlNSString = objc_msgSend((id)objc_getClass("NSString"), sel_registerName("stringWithUTF8String:"), "http://zmangames.com/product-details.php?id=1246");
objc_msgSend((id)objc_getClass("EAGLView"), sel_registerName("openURL:"), urlNSString);
【讨论】:
你为什么不把那个文件变成一个.mm
文件而不是使用所有的包袱?
这是别人的代码库,是关键任务代码。它将于 10 月 3 日在 App Store 上发布,我不会做一些我不确定的事情,直到我能够对其进行一些测试。否则,你提出了一个很好的观点。 :)
好的 - 任务关键听起来像是一个更好的理由来抛弃这些废话。
有时间来改变它,它现在是一个带有适当 Obj-C 调用的 .mm 文件。但这仍然回答了实际问题。 :)以上是关于升级到 Xcode 5 后,objc_msgSend 在哪里?的主要内容,如果未能解决你的问题,请参考以下文章
升级到 Xcode 5 后,objc_msgSend 在哪里?