NSTextTab - 正确使用“选项”

时间:2015-09-15 15:49:09

标签: ios

我最近开始使用Xcode 7并且得到了一个似乎是常见的警告:

Null passed to a callee that requires a non-null argument

我理解它告诉我的是什么,但我不确定正确解决方案对于我的特定问题是什么。这是警告发生的行:

NSTextTab *tab = [[NSTextTab alloc] 
                     initWithTextAlignment:NSTextAlignmentLeft 
                                  location:10.0f
                                   options:nil];

现在,在他的“编程iOS 8”一书(在GitHub上发布)中查看Matt Neuberg的例子,我看到以下内容:

let s = "Onions\t$2.34\nPeppers\t$15.2\n"
let mas = NSMutableAttributedString(string:s, attributes:[
// lines omitted...
let terms = NSTextTab.columnTerminatorsForLocale(NSLocale.currentLocale())
let tab = NSTextTab(textAlignment:.Right, location:170, options:[NSTabColumnTerminatorsAttributeName:terms])
// lines omitted
self.tv.attributedText = mas

据我所知,这是设置文本,以便字符串中的小数点是对齐的。大。有用。不是我需要的。我只是试图让左侧的标签给出一个特定且一致的缩进。

要“修复”我的代码(即让警告消失),我已将代码更改为:

NSTextTab *tab = [[NSTextTab alloc] initWithTextAlignment:NSTextAlignmentLeft location:10.0f options:[NSDictionary dictionary]];

这看起来很有效,但感觉就像一个超级笨拙的解决方案。我对NSTextTab的理解是错误的吗?什么是 正确 解决此问题的方法?

1 个答案:

答案 0 :(得分:3)

initWithTextAlignment文档中列出的唯一选项:location:options:是NSTabColumnTerminatorsAttributeName,它是可选的。

选项:通过使用NS_ASSUME_NONNULL_BEGIN / END宏在NSParagraphStyle.h头文件中将参数标记为非空。

结合这两个事实,您传递空NSDictionary的解决方案是解决编译器警告的正确方法。