如何让Scripting Bridge在运行时生成Objective-C类?

如何让Scripting Bridge在运行时生成Objective-C类?,第1张

概述我今天正在更新Scripting Bridge粘贴文件(对于Mail.app),并注意到 sdp(1) man page读取: You do not need to create a corresponding implementation file; Scripting Bridge will create the class implementations at runtime. 这听起来很酷 我今天正在更新Scripting BrIDge粘贴文件(对于Mail.app),并注意到 sdp(1) man page读取:

You do not need to create a corresponding implementation file; Scripting BrIDge will create the
class implementations at runtime.

这听起来很酷,但是我没有实现生成的类(如预期的那样):

Undefined symbols for architecture x86_64:  "_OBJC_CLASS_$_MailApplication",referenced from:      objc-class-ref in DMBUGReportwindowController.o  "_OBJC_CLASS_$_MailAttachment",referenced from:      objc-class-ref in DMBUGReportwindowController.o[... more of the same ...]ld: symbol(s) not found for architecture x86_64`

我不想压制所有未定义的符号,因为这可能很容易掩盖合法的问题,所以我只使用-U(根据ld(1) man page):

SpecifIEd that it is ok for symbol_name to have no deFinition. With
-two_levelnamespace,the resulting symbol will be marked dynamic_lookup
which means dyld will search all loaded images.

(我必须使用-Xlinker -U -Xlinker _OBJC_CLASS _ $_ MailApplication来获取那些到达ld的标志,否则clang会自己保留这些参数.)

显然使它们成为dynamic_lookup是错误的,因为这会在启动时出现动态链接错误:

dyld: Symbol not found: _OBJC_CLASS_$_MailApplication  Referenced from: /Users/jonathon/library/Developer/Xcode/...  Expected in: flat namespace in /Users/jonathon/library/Developer/Xcode/...

如果我使用-force_flat_namespace -undefined suppress(我不想使用它,如上所述),也会发生这种情况. Scripting Bridge Programming Guide似乎暗示我正在做正确的事情(“准备编码”部分),但没有提到这个问题.

解决方法 由于该类是动态创建的,因此无法链接到该类.该类将在运行时注册,但不会导出符号,链接器将无法找到它.

您需要将发送到MailApplication和MailAttachment的所有消息替换为NSClassFromString(@“MailApplication”)和NSClassFromString(@“MailAttachment”)的消息.

[MailApplication类]变为NSClassFromString(@“MailApplication”),[MailAttachment类]变为NSClassFromString(@“MailAttachment”).

总结

以上是内存溢出为你收集整理的如何让Scripting Bridge在运行时生成Objective-C类?全部内容,希望文章能够帮你解决如何让Scripting Bridge在运行时生成Objective-C类?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1001247.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存