【问题标题】:nullability-completeness warning since Xcode 9.3自 Xcode 9.3 以来的可空性完整性警告
【发布时间】:2018-12-06 05:39:03
【问题描述】:

The "nullability-completeness" warning 不适用于我的 Xcode 9.3(和 9.4.1)。 它可以在 Xcode 9.1 和 9.2 中使用。

我在 Xcode 9.2(或 9.1)中使用“Single View App”模板创建了一个新的 iOS 项目,然后将此方法添加到我的 ViewController.h:

- (nonnull UIView *)f:(UIView *)f g:(UIView *)g;

我在每个参数上都收到了 2 个警告,如下所示:

In file included from /Users/daniel/Projects/tests/TestNullability92/TestNullability92/ViewController.m:9:
/Users/daniel/Projects/tests/TestNullability92/TestNullability92/ViewController.h:13:31: warning: pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) [-Wnullability-completeness]
- (nonnull UIView *)f:(UIView *)f g:(UIView *)g;
                              ^
/Users/daniel/Projects/tests/TestNullability92/TestNullability92/ViewController.h:13:31: note: insert '_Nullable' if the pointer may be null
- (nonnull UIView *)f:(UIView *)f g:(UIView *)g;
                              ^
                               _Nullable
/Users/daniel/Projects/tests/TestNullability92/TestNullability92/ViewController.h:13:31: note: insert '_Nonnull' if the pointer should never be null
- (nonnull UIView *)f:(UIView *)f g:(UIView *)g;

但如果我在 Xcode 9.3(或 9.4.1)中打开并重建该项目 - 我不会收到这些警告。

我尝试转到构建设置并显式启用此标志(虽然它应该默认启用),但仍然一无所获:

【问题讨论】:

  • Xcode 9.4.1 上的同样问题。
  • 我在 Xcode 10.0 上看到了同样的问题。对此有任何修复吗?我想收到关于可空性(不)完整性的警告。
  • 为此我仍然保留 Xcode 9.2。我们应该将此报告给 Apple。
  • 报告给 bugreport.apple.com,问题 ID 为 45399704
  • 当前的 Xcode beta (10.2) 似乎再次显示这些警告。而且你不能用 -Wno-nullability-completeness 来关闭它们......

标签: ios objective-c xcode clang


【解决方案1】:

Xcode 从 9.3 到 10.1 存在一个错误,即 no-nullability-completeness 标志没有按预期工作。

这在 Xcode 10.2 中已修复,它再次产生正确的警告:如果启用该标志(默认情况下应启用),则头文件中的指针对象参数和返回值需要具有可空性注释(或在 NS_ASSUME_NONNULL_BEGIN 块内)。如果注释丢失,编译器警告将按预期生成。

【讨论】:

  • 不知道“产生正确的警告”是什么意思。这个问题非常不清楚您是否想要这些警告以及哪些版本会产生而不产生它们。
  • @ivan_pozdeev 我已经更新了答案。如果还有更多的误解,请多提问题。
【解决方案2】:

解决方案非常简单(无需提交错误)。


在您的项目构建设置中,只需搜索“自定义编译器 标志”,并添加以下内容:

-Wno-nullability-completeness


如果您尝试显示警告,请尝试添加此标志,清理并构建,然后删除该标志(清理并再次构建..)。如果这不起作用,它可能会

也许删除这些警告与其说是一个错误,不如说是为了清理项目及其错误消息而有目的地隐藏这些错误消息。

【讨论】:

  • 如果您想停用警告,您提出的解决方案似乎有帮助,对吧?我认为 battlmonstr 会尝试激活警告,这不是必需的,因为默认情况下应该激活它们。但我有同样的问题。如果您能告诉我们如何激活它们,我会非常感兴趣,因为 -Wnullability-completeness 不起作用。
  • 哦 - OP 似乎具有误导性,因为它强烈暗示自 Xcode 9.3 以来没有任何警告的标题。更新到 Xcode 10 并查看它们是否出现。 Xcode 现在甚至在所有新文件的顶部和底部都包含 NULL 标志,以编程方式消除这些警告
猜你喜欢
  • 1970-01-01
  • 2016-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-08
  • 1970-01-01
  • 2022-11-14
  • 1970-01-01
相关资源
最近更新 更多