我最近开始使用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
的理解是错误的吗?什么是 正确 解决此问题的方法?
答案 0 :(得分:3)
initWithTextAlignment文档中列出的唯一选项:location:options:是NSTabColumnTerminatorsAttributeName,它是可选的。
选项:通过使用NS_ASSUME_NONNULL_BEGIN / END宏在NSParagraphStyle.h头文件中将参数标记为非空。
结合这两个事实,您传递空NSDictionary的解决方案是解决编译器警告的正确方法。