在NSAttributedString上使用nil调用RTFFromRange时,Xcode会生成警告,用于documentAttributes

时间:2015-09-15 15:23:53

标签: objective-c cocoa nsattributedstring

Xcode 7正在为代码生成一堆警告:

NSAttributedString *anEntry = ...
someData = [anEntry RTFFromRange: NSMakeRange(0,[anEntry length]) documentAttributes: nil];

警告是:

  

传递给需要非空参数的被调用者的空参数

来自Apple的文档有点令人困惑(它看起来好像存在编辑错误),但是当没有文档属性(没有我的文档属性)时,传递给documentAttributes参数的nil似乎是可以接受的情况)。

我正在寻找解决此警告的方法。我可以创建一个(基本上)空字典作为documentAttributes传入,但是这在我的代码中发生了很多,我宁愿不用额外的代码搞乱它。

我错过了真正的问题吗?关于nil的文档是否可以被接受,我真的应该为documentAttributes传递一些内容吗?

之前有人遇到过此问题,并找到了解决方案吗?

编辑:基于以下答案,我最终选择了:

NSAttributedString *anEntry = ...
someData = [anEntry RTFFromRange: NSMakeRange(0,[anEntry length]) documentAttributes: @{NSDocumentTypeDocumentAttribute: NSRTFTextDocumentType}];

我认为这是正确的,它会解决警告。

1 个答案:

答案 0 :(得分:1)

从Xcode 7开始,Objective-C允许您具体说明参数是否为nil。对于NSAttributedString RTFFromRange:documentAttributes:方法,两个参数都不允许为nil。因此,编译器现在告诉您,您无法将nil传递给不允许nil的参数。

{J} docAttributes参数的文档令人困惑,这是正确的。它似乎只是部分更新。尝试传递一个空字典。

将代码更改为:

NSAttributedString *anEntry = ...
someData = [anEntry RTFFromRange: NSMakeRange(0,[anEntry length]) documentAttributes: @{}];

这会传递一个空字典,而不是nil

有关可为空参数的示例,请参阅NSAttributedString dataFromRange:documentAttributes:error:文档(error参数可以是nil)。