我在使用 ARC 的应用程序中使用 GData 静态库。谷歌的说明说将头文件从库链接到项目目标。
问题是,当我这样做时,我会收到编译器错误,因为 GData 库与 ARC 不兼容。
谷歌声明:
弧兼容性
当库源文件直接编译到使用 ARC 的项目中时,必须专门针对库源禁用 ARC。
要在 Xcode 4 中对源文件禁用 ARC,请在 Xcode 中选择项目和目标。在目标“Build Phases”选项卡下,展开 Compile Sources 构建阶段,选择库源文件,然后按 Enter 打开编辑字段,然后键入-fno-objc-arc
作为这些文件的编译器标志。
(参考)
但由于我只有头文件,我无法在应用程序目标中使用此标志。
嗯,我问了一下,10 分钟后就发现了。无论如何,如果它能帮助某人:
- 问题仅在于 .h 文件,Goole 注释仅适用于您嵌入库而不是静态库的情况。
- 有人向谷歌报告该问题后,他们添加了解决该问题的新宏,如下所示:
在头文件中搜索名为:GDataDefines.h 的文件
并在里面添加这段代码:
//
// Simple macros to allow building headers for non-ARC files
// into ARC apps
//
#ifndef GDATA_REQUIRES_ARC
#if defined(__clang__)
#if __has_feature(objc_arc)
#define GDATA_REQUIRES_ARC 1
#endif
#endif
#endif
#if GDATA_REQUIRES_ARC
#define GDATA_UNSAFE_UNRETAINED __unsafe_unretained
#else
#define GDATA_UNSAFE_UNRETAINED
#endif
然后在导致 ARC 错误的 GDataObject.h 中
将 GDataDescriptionRecord 结构更改为
typedef struct GDataDescriptionRecord {
NSString GDATA_UNSAFE_UNRETAINED *label;
NSString GDATA_UNSAFE_UNRETAINED *keyPath;
GDataDescRecTypes reportType;
} GDataDescriptionRecord;
And the
__weak GDataObject *parent_; // parent in tree of GData objects
to
GDataObject GDATA_UNSAFE_UNRETAINED *parent_;
这是谷歌更新的链接:http://code.google.com/p/gdata-objectivec-client/source/detail?r=712
就是这样。
希望它能帮助别人
Shani
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)