我仍然在核心数据配置数据中使用bool。 NSManagedObject用于说核心数据“config”类可以快速键入以下内容并且您不会收到错误:
if (self.myCoreDataConfigObject.isOn) { ...
但它没有给出正确的结果,因为从NSNumber到bool的转换需要:
if ([self.myCoreDataConfigObject.isOn boolValue]) { ...
问题 - 有关如何避免此问题的任何提示/技巧?如果XCode在这种情况下会显示警告,那就太好了......
答案 0 :(得分:1)
您可以将字段重命名为isOnValue
,然后在名为NSManagedObject
的{{1}}子类上为您提供访问者,为您运行isOn
转换。
但请注意,“可选”值可能为-boolValue
,您可能会将此视为与nil
不同的内容。
答案 1 :(得分:0)
在'目标'下 - >项目设置中的“构建设置”有一组编译器警告选项。我不是百分之百,但打开'迂腐警告'可能会这样做,如果不是每种不同类型的编译器都有几十种不同的设置。尝试切换其中的一些并查看它是否会在您想要的地方生成警告。
但是,if (self.myCoreDataConfigObject.isOn)
是一个完全有效的表达式,因此不会生成任何错误(警告可能,但不会出现错误),因为使用if(SOME_OBJECT)
只检查它是否等同于nil
或0
。 (当然,除非您指定编译器将警告视为错误)
答案 2 :(得分:0)
你可以做的一件事是在if()中使用C99 bool类型。例如,以下内容:
NSNumber *num = [NSNumber numberWithInt:0];
if (num == true) {
NSLog(@"num is true");
}
使XCode发出警告。你必须遵守一个总是在条件中使用“== true”的约定。