属性的参数数量错误

Mat*_* N. 5 objective-c

在Objective C中,有以下代码将方法标记为过时:

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

此代码已建议在这里,这里这里,可能在几个地方,我现在不能回忆起了我的头顶.

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

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

Bil*_*son 1

在我的搜索中,我找到了有关此的 clang 文档; Clang 语言扩展

我的 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;
Run Code Online (Sandbox Code Playgroud)

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

-(void)oldMethod __attribute((deprecated("Don't use Old Method")));
Run Code Online (Sandbox Code Playgroud)

长话短说,在搞乱这些构建设置和更改之前,请务必保留备份。

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

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

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

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

如果这个答案成为您问题的核心,请通过投票来帮助我!蒂亚!