属性的参数数量错误

时间:2013-06-04 08:37:23

标签: objective-c

在Objective C中,有以下代码将方法标记为已废弃:

__attribute__((unavailable("message text")));

此代码已被建议hereherehere,可能还有一些我现在无法回想起来的地方。

我无法编译此代码。我得到的编译器错误是“为'unavailable'属性指定的参数数量错误”。弃用属性的错误相同。如果我删除它编译的字符串,但我想知道如何使用字符串编译它。由于有几个人独立建议并且甚至被投票,它必须是工作代码。但我似乎无法编译。

我做错了什么?如何编译?

1 个答案:

答案 0 :(得分:1)

在我的搜索中,我找到了关于此的clang文档; Clang Language Extensions

我的Xcode版本是4.6.2,我尝试了没有ARC的LLVM-gcc,以确保gcc编译器仍然可以使用扩展。

我的C / C ++ / Objective-C选项编译器是; LLVM GCC 4.2和Apple LLVM编译器。

这两个属性都在.h头文件中。 LLVM GCC和APPLE LLVM都采用这两种风格

-(void)oldMethod __attribute((deprecated()));
//or
-(void)oldMethod2 DEPRECATED_ATTRIBUTE;

LLVM GCC抱怨以下方法格式,Apple LLVM正常工作(这实际上回答了您的问题。您的编译器使用的是LLVM GCC或更旧版本)

-(void)oldMethod __attribute((deprecated("Don't use Old Method")));

简而言之,请务必在弄乱这些构建设置和更改之前保留备份。

  1. 检查正确的Xcode是否正在运行(4.6.2是最新版本),我最终得到了一个不同版本的混乱,不得不进行清理。

  2. 检查“构建选项”下项目设置中可用的编译器版本。 (我在上面表示答案)

  3. 对于较旧的项目,您可能需要检查使用ARC进行重构并转换为现代objective-c。只要确保备份,在较大的项目上它可能会很麻烦。 (编辑 - >重构 - >现代目标-C) 影片; WWDC 2011使用自动引用计数进行重构 WWDC 2012现代Objective-C视频https://developer.apple.com/videos/wwdc/2012/

    注意:现代Objective-C重构将更改为Apple-LLVM编译器。以及其他变化。

  4. 如果这个答案成为你问题的核心,请通过投票来帮助我! TIA!