如何防止在Core Data中滥用bool(即忘记将“boolValue”转换为NSNumber)

时间:2011-09-28 23:15:32

标签: iphone ios core-data

我仍然在核心数据配置数据中使用bool。 NSManagedObject用于说核心数据“config”类可以快速键入以下内容并且您不会收到错误:

  if (self.myCoreDataConfigObject.isOn) { ...

但它没有给出正确的结果,因为从NSNumber到bool的转换需要:

  if ([self.myCoreDataConfigObject.isOn boolValue]) { ...

问题 - 有关如何避免此问题的任何提示/技巧?如果XCode在这种情况下会显示警告,那就太好了......

3 个答案:

答案 0 :(得分:1)

您可以将字段重命名为isOnValue,然后在名为NSManagedObject的{​​{1}}子类上为您提供访问者,为您运行isOn转换。

但请注意,“可选”值可能为-boolValue,您可能会将此视为与nil不同的内容。

答案 1 :(得分:0)

在'目标'下 - >项目设置中的“构建设置”有一组编译器警告选项。我不是百分之百,但打开'迂腐警告'可能会这样做,如果不是每种不同类型的编译器都有几十种不同的设置。尝试切换其中的一些并查看它是否会在您想要的地方生成警告。

但是,if (self.myCoreDataConfigObject.isOn)是一个完全有效的表达式,因此不会生成任何错误(警告可能,但不会出现错误),因为使用if(SOME_OBJECT)只检查它是否等同于nil0(当然,除非您指定编译器将警告视为错误)

答案 2 :(得分:0)

你可以做的一件事是在if()中使用C99 bool类型。例如,以下内容:

NSNumber *num = [NSNumber numberWithInt:0];

if (num == true) {
    NSLog(@"num is true");
}

使XCode发出警告。你必须遵守一个总是在条件中使用“== true”的约定。