objective-c – Aperture插件与EXC_BAD_ACCESS崩溃

objective-c – Aperture插件与EXC_BAD_ACCESS崩溃,第1张

概述我尝试运行Aperture SDK 2.1附带的SampleFTPExportPlugIn.我必须调整Base SDK设置并手动将PluginManager.Framework文件夹复制到/ Library / Frameworks,如 here所述. 所有编译和Aperture 3.2.3现在提供菜单项File / Export / FTP. 选择“FTP”导出方法并因此触发插件代码时,Aper 我尝试运行Aperture SDK 2.1附带的SampleftPExportPlugIn.我必须调整Base SDK设置并手动将PluginManager.Framework文件夹复制到/ library / Frameworks,如 here所述.

所有编译和Aperture 3.2.3现在提供菜单项file / Export / FTP.

选择“FTP”导出方法并因此触发插件代码时,Aperture会发生EXC_BAD_ACCESS崩溃.当尝试获取对ApertureExportManager的引用时,非法内存访问发生在类SampleftPExportPlugIn的initWithapimanager方法中:

_exportManager = [[_apimanager APIForProtocol:@protocol(ApertureExportManager)] retain];

这是在Aperture将控制交给插件后执行的第二行,似乎是在任何Aperture插件中获取ApertureExportManager引用的标准方法(我还没有找到任何替代方法来实现在任何地方).

这里的堆栈跟踪:

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)Exception Codes: 0x000000000000000d,0x0000000000000000VM Regions Near 0:-->     __TEXT                 0000000100000000-0000000100798000 [ 7776K] r-x/rwx SM=COW  /Applications/Aperture.app/Contents/MacOS/ApertureApplication Specific information:objc_msgSend() selector name: classobjc[3000]: garbage collection is OFFPerforming @selector(a_exportPlugIn:) from sender NSMenuItem 0x111d2a540Thread 0 Crashed:: dispatch queue: com.apple.main-thread0   libobjc.A.dylib                 0x00007fff8711c090 objc_msgSend_vtable2 + 161   com.apple.CoreFoundation        0x00007fff8381e25f -[__NSCFString isEqualToString:] + 632   com.apple.PluginManager         0x0000000101211218 -[PROBundleHandler APIForProtocol:] + 1093   com.apple.CoreFoundation        0x00007fff83852f4c __invoking___ + 1404   com.apple.CoreFoundation        0x00007fff83852de4 -[NSInvocation invoke] + 1325   com.apple.CoreFoundation        0x00007fff83852fb4 -[NSInvocation invokeWithTarget:] + 526   com.apple.CoreFoundation        0x00007fff8384dff4 ___forwarding___ + 7567   com.apple.CoreFoundation        0x00007fff8384dc88 _CF_forwarding_prep_0 + 2328   com.apple.SampleftPExportPlugIn 0x000000012c0d5361 -[SampleftPExportPlugIn initWithapimanager:] + 2099   com.apple.PluginManager         0x000000010120c6fa -[PROConcretePlugIn plugInInstance] + 212

我阅读了有关Objective-C内存管理的所有内容,但无法理解它.我在网上找到的所有其他示例都是这样实现的,所以我想我有一个兼容性问题,我的Aperture / library安装中缺少一些东西.我该如何缩小问题范围?

编辑:

问题似乎是传入apimanager.方法签名是:

- (ID)initWithapimanager:(ID<PROAPIAccessing>)apimanager

然后将该参数分配给我们的内部参考:

_apimanager = apimanager;

然而传入的实际类是PROPlugInFirewall,因为此输出重新启动:

NSLog(@"_apimanager class is: %@",[[_apimanager class] description]);

然后调用respondsToSelector会导致同样的崩溃,尽管此方法是从NSObject继承的.

if ( [_apimanager respondsToSelector:@selector(APIForProtocol:)] ) {        NSLog(@"responds");    }

_apimanager本身将自身描述为:

_apimanager is: <[*<PROBundleHandler: 0x14d79130> (PROAPIAccessing)*]>

还是卡住……

编辑:

所以看起来Aperture正在传递一个指向天堂的指针…但是,我刚从Apple网页安装了另一个插件,安装程序和所有内容.那个在调用时也失败了……

解决方法 >下载FXPlug 1.2.5 SDK
>打开安装程序包的内容
>将PluginManager.framework复制到/ library / Frameworks

你的插件现在应该工作!

FXPlug SDK(2.2 / 2.4)中较新版本的PluginManager.framework将导致此崩溃.

使用Xcode 4.5在10.8上测试

总结

以上是内存溢出为你收集整理的objective-c – Aperture插件与EXC_BAD_ACCESS崩溃全部内容,希望文章能够帮你解决objective-c – Aperture插件与EXC_BAD_ACCESS崩溃所遇到的程序开发问题。

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

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存