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类?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)