- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我尝试运行 Aperture SDK 2.1 附带的 SampleFTPExportPlugIn。我必须调整 Base SDK 设置并手动将 PluginManager.Framework 文件夹复制到/Library/Frameworks,如所述 here .
所有编译和 Aperture 3.2.3 现在提供菜单项文件/导出/FTP。
选择“FTP”导出方法并因此触发插件代码时,Aperture用EXC_BAD_ACCESS崩溃。非法内存访问发生在<strong>initWithAPIManager</strong>
类的方法SampleFTPExportPlugIn
当试图获得对 ApertureExportManager
的引用时:
_exportManager = [[_apiManager apiForProtocol:@protocol(ApertureExportManager)] retain];
这是在 Aperture 将控制权移交给插件后执行的第二行,似乎是获取对 ApertureExportManager
的引用的标准方式在任何 Aperture 插件中(我还没有找到任何替代方法来实现相同的任何地方)。
这里是堆栈跟踪:
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: 0x000000000000000d, 0x0000000000000000
VM Regions Near 0:
-->
__TEXT 0000000100000000-0000000100798000 [ 7776K] r-x/rwx SM=COW /Applications/Aperture.app/Contents/MacOS/Aperture
Application Specific Information:
objc_msgSend() selector name: class
objc[3000]: garbage collection is OFF
Performing @selector(a_exportPlugIn:) from sender NSMenuItem 0x111d2a540
Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0 libobjc.A.dylib 0x00007fff8711c090 objc_msgSend_vtable2 + 16
1 com.apple.CoreFoundation 0x00007fff8381e25f -[__NSCFString isEqualToString:] + 63
2 com.apple.PluginManager 0x0000000101211218 -[PROBundleHandler apiForProtocol:] + 109
3 com.apple.CoreFoundation 0x00007fff83852f4c __invoking___ + 140
4 com.apple.CoreFoundation 0x00007fff83852de4 -[NSInvocation invoke] + 132
5 com.apple.CoreFoundation 0x00007fff83852fb4 -[NSInvocation invokeWithTarget:] + 52
6 com.apple.CoreFoundation 0x00007fff8384dff4 ___forwarding___ + 756
7 com.apple.CoreFoundation 0x00007fff8384dc88 _CF_forwarding_prep_0 + 232
8 com.apple.SampleFTPExportPlugIn 0x000000012c0d5361 -[SampleFTPExportPlugIn initWithAPIManager:] + 209
9 com.apple.PluginManager 0x000000010120c6fa -[PROConcretePlugIn plugInInstance] + 212
我阅读了所有关于 Objective-C 内存管理的内容,但无法理解它。我在网上找到的所有其他示例都是这样实现的,所以我想我有一个兼容性问题,我的 Aperture/Library 安装中缺少一些东西。我怎样才能缩小问题的范围?
编辑:
问题似乎出在传入的 apiManager 上。方法签名是:
- (id)initWithAPIManager:(id<PROAPIAccessing>)apiManager
然后将参数分配给我们的内部引用:
_apiManager = apiManager;
然而实际传入的类是PROPlugInFirewall
,因为这个输出 reviels:
NSLog(@"_apiManager class is: %@", [[_apiManager class] description]);
然后调用 respondsToSelector
尽管此方法是从 NSObject 继承的,但会导致相同的崩溃。
if ( [_apiManager respondsToSelector:@selector(apiForProtocol:)] ) {
NSLog(@"responds");
}
_apiManager 本身将自己描述为:
_apiManager is: <[*<PROBundleHandler: 0x14d79130> (PROAPIAccessing)*]>
还是卡住了...
编辑:
所以看起来 Aperture 正在传递一个指向 nirvana 的指针...但是,我刚刚安装了另一个插件,来自 Apple 网页,带有安装程序和所有内容。调用时那个也失败了...
最佳答案
您的插件现在应该可以工作了!
FXPlug SDK(2.2/2.4) 中较新版本的 PluginManager.framework 将导致此崩溃。
使用 Xcode 4.5 在 10.8 上测试
关于objective-c - Aperture 插件因 EXC_BAD_ACCESS 而崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10386395/
Aperture 库在文件系统中作为包可见。在这个包中,有一个我想要访问的 XML 文件(以及其他文件)。问题是我不能简单地使用该 XML 文件的路径,因为该文件包含在一个包中(需要首先打开该包)。
我尝试运行 Aperture SDK 2.1 附带的 SampleFTPExportPlugIn。我必须调整 Base SDK 设置并手动将 PluginManager.Framework 文件夹复制
我创建了一个应用程序,其中包含一个 ImageView 子类,该子类接受直接从 Finder 拖放文件/文件夹。 问题是我现在正尝试让它接受来自 iPhoto 或 Aperture 的照片。 我应该注
我试图了解如何在英特尔芯片组上以 x86 保护模式绘制简单图形。我已经(有点)知道如何使用 VGA 接口(interface)来做到这一点,并且我正在尝试了解如何使用 G35 Express 来做到这
一个 friend 提出了这个挑战。只是为了训练,我尝试使用 Reactive Extensions 来解决它,但我没有运气。这并不奇怪,因为我还是 Rx 的新手。 问题是: An aperture
我正在使用 ffmpeg 将文件转换为 QuickTime 容器。我了解某些 QuickTime 文件需要拍手原子,即“这是所有未压缩 Y´CbCr 数据格式的强制扩展”。 https://devel
我正在尝试使用新的照片框架执行与 writeImageToSavedPhotosAlbum 等效的操作。 为了保存图像,我只这样做: func imagePickerController(picker
我正在尝试重新创建以下 Logo : 这是我到目前为止尝试过的, html, body, * { margin: 0; padding: 0; box-sizing: border-box
我是一名优秀的程序员,十分优秀!