【问题标题】:How can I test if an attribute of a CoreData object is null?如何测试 CoreData 对象的属性是否为空?
【发布时间】:2014-12-24 01:31:45
【问题描述】:

我想测试是否设置了 NSManageObject 子类的 NSNumber 属性。请注意,该属性是 NSNumber / Integer16 我尝试了几种方法,但都没有奏效(下面这些总是评估为假):

// Note: patient.zyklus_laenge is of NSNumber (Integer16)
// does not work
id value = patient.zyklus_laenge;
if (value == [NSNull null]) {
    self.zyklusLaengeTextField.text = [NSString stringWithFormat:@"%d", 28];
} else {
    self.zyklusLaengeTextField.text = [NSString stringWithFormat:@"%@", patient.zyklus_laenge];
}
// does not work
if (!patient.zyklus_laenge) {
    self.zyklusLaengeTextField.text = [NSString stringWithFormat:@"%d", 28];
} else {
    self.zyklusLaengeTextField.text = [NSString stringWithFormat:@"%@", patient.zyklus_laenge];
}
// does not work
if ([patient.zyklus_laenge isEqual:nil]) {
    self.zyklusLaengeTextField.text = [NSString stringWithFormat:@"%d", 28];
} else {
    self.zyklusLaengeTextField.text = [NSString stringWithFormat:@"%@", patient.zyklus_laenge];
}
// does not work
if (patient.zyklus_laenge == nil) {
    self.zyklusLaengeTextField.text = [NSString stringWithFormat:@"%d", 28];
} else {
    self.zyklusLaengeTextField.text = [NSString stringWithFormat:@"%@", patient.zyklus_laenge];
}

谁能启发我并解释为什么这些不起作用?

【问题讨论】:

  • patient.zyklus_laenge 在命令行中返回什么,当它为零时?
  • NSLog 显示:patient.zyklus_laenge: (null)
  • 尝试用“=="切换“isEqual:”
  • 已经试过了,看最后一个if-else,没用。 NSLog 总是显示:patient.zyklus_laenge: (null)else 分支永远不会执行
  • 不是 NSLog,而是命令行中的po patient.zyklus_laenge

标签: ios objective-c core-data nsmanagedobject


【解决方案1】:
id value = patient.zyklus_laenge;
if (value == [NSNull class]) 

id value = patient.zyklus_laenge;
if ([value isKindOfClass:[NSNull class]])

【讨论】:

  • 这可行,但它给了我一个编译器警告:不兼容的指针类型。我找到了一个不同的解决方案,见下文
  • 也许他的意思是[NSNull class]
  • 不,我试过了,因为这对我来说似乎是合乎逻辑的。但是[NSNull class] 对我不起作用
【解决方案2】:

解决方法是根据需要将core data中的属性设置为默认值,并使用此代码进行测试:

if (!patient.zyklus_laenge) {
    self.zyklusLaengeTextField.text = [NSString stringWithFormat:@"%d", 28];
} else {
    self.zyklusLaengeTextField.text = [NSString stringWithFormat:@"%@", patient.zyklus_laenge];
}

【讨论】:

    【解决方案3】:

    如果您为属性设置了默认值,它将是该默认值,通常为 0,而不是 null。

    如果是这样,您可以检查以下内容:

    if (patient.zyklus_laenge.intValue == 0)

    否则,可以使用这个空检查:

    if (patient.zyklus_laenge != nil)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-22
      • 1970-01-01
      • 2017-03-16
      • 2014-08-22
      • 2014-05-06
      • 2015-09-20
      • 2016-11-09
      相关资源
      最近更新 更多