ios – 自定义Xcode IDE插件错误:“找不到名为…的类”

ios – 自定义Xcode IDE插件错误:“找不到名为…的类”,第1张

概述我已经开发了自己的自定义 Xcode .ideplugin来向Xcode的Object Library窗格添加自定义对象.我有一个基于我称为IBMyCustomObject的类的自定义对象模板,后者又有一个名为MyCustomObject的类的runtimeClassName(运行时类名是在加载Xib文件时将在运行时实例化的类的名称) . 经过大量的研究,我已经成功地完成了这项工作.我现在可以将自 我已经开发了自己的自定义 Xcode .IDeplugin来向Xcode的Object library窗格添加自定义对象.我有一个基于我称为IBMyCustomObject的类的自定义对象模板,后者又有一个名为MyCustomObject的类的runtimeClassname(运行时类名是在加载Xib文件时将在运行时实例化的类的名称) .

经过大量的研究,我已经成功地完成了这项工作.我现在可以将自定义对象从“对象库”窗格拖放到Xib文件中,在“检查器”窗格中设置对象属性,其他所有内容都很有效.唯一的问题出现在编译时,Xcode的ibtool在编译Xib文件时给出了以下错误

Exception name: NSinvalidargumentexceptionException reason: Could not find class named MyCustomObject

这是完整的异常回溯日志:

Exception backtrace:   0. CoreFoundation           0x0226d6d8 __exceptionPreprocess  1. libobjc.A.dylib          0x01fe98b6 objc_exception_throw  2. CoreFoundation           0x022fd721 -[NSException raise]  3. ???                      0x000116b8 [IBCocoatouchToolObjectPackage initWithRequest:]  4. ???                      0x00010597 [IBCocoatouchTool .cxx_destruct]  5. ???                      0x0000b63d [IBCocoatouchTool compileNibForRequest:minimumCompatibility:layoutInfo:]  6. IBFoundation             0x00362c51 __72-[IBMessageReceiveChannel deliverMessage:toTarget:withArguments:result:]_block_invoke  7. IBFoundation             0x00362996 -[IBMessageReceiveChannel deliverMessage:toTarget:withArguments:result:]  8. IBFoundation             0x00362673 __80-[IBMessageReceiveChannel runBlockingReceiveLoopNotifyingQueue:notifyingTarget:]_block_invoke  9. libdispatch.dylib        0x029c2444 _dispatch_barrIEr_sync_f_slow_invoke 10. libdispatch.dylib        0x029d34b0 _dispatch_clIEnt_callout 11. libdispatch.dylib        0x029c1766 _dispatch_main_queue_callback_4CF 12. CoreFoundation           0x022d2b6e __CFRUNLOOP_IS_SERviciNG_THE_MAIN_disPATCH_QUEUE__ 13. CoreFoundation           0x022137eb __CFRunLoopRun 14. CoreFoundation           0x02212bf3 CFRunLoopRunspecific 15. CoreFoundation           0x02212a0b CFRunLoopRunInMode 16. Foundation               0x01c1fe55 -[NSRunLoop(NSRunLoop) runMode:beforeDate:] 17. ???                      0x0003ac67 [IBAbstractCocoatouchTool startServingReceiveChannel:] 18. ???                      0x0003ad62 [IBAbstractCocoatouchTool startServingSocket:] 19. ???                      0x0003aec7 [IBAbstractCocoatouchTool protocolCapabilitIEs] 20. ???                      0x0001053e [IBCocoatouchTool .cxx_destruct] 21. libdyld.dylib            0x9313d725 startException info:{}

关于如何让Xcode(更具体地说是ibtool)了解MyCustomObject类以便它可以在编译时找到它的任何想法?我尝试了很多东西,包括将MyCustomObject放在一个框架中并在运行时加载bundle,但一切都没有用.如果我用NSMutableDictionary(或任何其他的Foundation或UIKit类)而不是MyCustomObject替换IBMyCustomObject的runtimeClassname,一切都很完美,但我真的需要使用我自己的MyCustomObject类.

P.S.:对于每个对开发类似插件感兴趣的人,我会在sensiblecocoa.com(使用插件的框架)的详细博客文章中提出我的所有发现.

解决方法 好吧,事实证明Xcode(更具体地说是ibtool)在编译期间产生了一个名为“Interface Builder Cocoa touch Tool”的全新过程,这解释了为什么加载MyCustomClass包没有任何效果.我考虑的一个可能的解决方案是使用dylib注入将MyCustomClass库注入到新生成的进程中,但是我发现的所有技术都不足以提供稳健且稳定的生产代码.

我最终使用NSMutableDictionary而不是MyCustomClass,它完美地编译.然后,我在对象所有者类中使用了一个setter属性方法,将加载的NSMutableDictionary转换为MyCustomClass,然后手动将所有字典键分配给它们各自的属性.正如我之前所说,我将在sensiblecocoa.com博客页面上发布所有插件开发细节.

总结

以上是内存溢出为你收集整理的ios – 自定义Xcode IDE插件错误:“找不到名为…的类”全部内容,希望文章能够帮你解决ios – 自定义Xcode IDE插件错误:“找不到名为…的类”所遇到的程序开发问题。

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

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存