Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 什么';s'的-Wsomething标志;未找到实例方法';警告?_Objective C_Cocoa_Warnings_Clang - Fatal编程技术网

Objective c 什么';s'的-Wsomething标志;未找到实例方法';警告?

Objective c 什么';s'的-Wsomething标志;未找到实例方法';警告?,objective-c,cocoa,warnings,clang,Objective C,Cocoa,Warnings,Clang,我最近遇到过一个案例,有人在init方法中添加了一个参数,并破坏了另一个共享代码的项目。由于这只是一个警告,没有人意识到应用程序已损坏,因此我尝试将此警告转化为错误: warning: instance method '-someMethod' not found (return type defaults to 'id') 我发现可以将其他C标志中的-Werror=foo传递给Xcode中的编译器,以将警告转化为错误,但我似乎找不到“foo”应该是什么。我尝试过“未声明的选择器”,但它只捕获

我最近遇到过一个案例,有人在init方法中添加了一个参数,并破坏了另一个共享代码的项目。由于这只是一个警告,没有人意识到应用程序已损坏,因此我尝试将此警告转化为错误:

warning: instance method '-someMethod' not found (return type defaults to 'id')
我发现可以将其他C标志中的-Werror=foo传递给Xcode中的编译器,以将警告转化为错误,但我似乎找不到“foo”应该是什么。我尝试过“未声明的选择器”,但它只捕获@selector案例。我曾经尝试过-Werror隐式函数声明,但这似乎也不适用于这种情况

在偶然搜索巨大的源代码时,我在找到“warn\u inst\u method\u not\u found”之后尝试了“inst method not found”和“instance method not found”

帮助

更新:
下面是一个示例,您可以编译(例如在CodeRunner中)以查看警告:

您要查找的选项是
-Werror=objc method access
。如果您下载并编译了发布的要点,那么Clang会在警告消息中明确告诉您这一点:

% clang test.m -c
test.m:13:21: warning: instance method '-initWithNum:' not found (return type
      defaults to 'id') [-Wobjc-method-access]
  ...theObj = [[MyClass alloc] initWithNum: [NSNumber numberWithInt: 15]];
              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 warning generated.

% clang test.m -Werror=objc-method-access -c  // ta-da!
但在现实世界中,我同意上面所有的评论:您应该修复或抑制所有编译器警告。您的构建应该始终以干净的方式构建。否则,正如您正确地观察到的,您将无法区分真正的bug和“常见的垃圾邮件”

FWIW,这是我使用的Clang版本:

$ clang --version
clang version 3.2  (http://llvm.org/git/llvm 1503aba4a036f5394c7983417bc1e64613b2fc77)
Target: x86_64-apple-darwin12.2.0
Thread model: posix

不是答案,但你能不能确保你的代码不抛出警告并将所有警告视为错误?你可以使用GCC_treat_warnings_as_errors=YES(“将警告视为错误”)全局打开警告视为错误,但我怀疑你不希望所有警告都视为错误“因为这只是一个警告,没有人意识到应用程序已损坏…”这就是将所有警告视为错误的原因。我能想到的最好方法是使用-Werror(它将所有警告都转换为错误,包括此警告),然后对您不希望作为错误的每种类型的警告使用-Wno error=。将所有警告视为错误不起作用。这是一个碳项目。由于“已弃用”警告,整个应用程序将停止编译。从我粘贴到上面链接的要点中的完整错误消息中可以看出,我的clang版本没有显示此注释。当我再次靠近编译器时,我将尝试它是否有效。当我尝试此选项时,我得到以下错误:clang:warning:unknown warning option'-Werror=objc method access';你的意思是“-Werror=objc cocoa-api”?嗯,它可能是在比你现在使用的更新版本的Clang中添加的。如果你不能升级你的工具链,我想你现在就卡住了(为了记录在案,它与Clang版本3.2(Xcode 4.5 build 4G182)配合得很好。我总是使用最新的最终版本。我不能将beta用于运输产品(似乎最终版本还不够beta…)。此外:我不允许在这里谈论beta。是的,我正在运行版本4.5(4G182),所以无论您使用的是什么版本的clang,它都不在最终版本中。我的项目设置为“默认编译器(Apple LLVM编译器4.1)”。