How can I test if an attribute of a CoreData object is null?

巧了我就是萌 提交于 2019-12-12 02:05:59

问题


I want to test if an NSNumber attribute of a NSManageObject Subclass has been set or not. Note, that the attribute is of NSNumber / Integer16 I have tried several approaches but none worked (these below always evaluate to false):

// 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];
}

Can anyone enlighten me and explain me why these are not working?


回答1:


The solution is to set the attribute in core data as required with a default value and to test with this code:

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



回答2:


If you have a default value set for the attribute, it will be that default value, which is normally 0, not null.

If so, you can check the following:

if (patient.zyklus_laenge.intValue == 0)

Otherwise, this null check can be used:

if (patient.zyklus_laenge != nil)




回答3:


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

to

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


来源:https://stackoverflow.com/questions/26611823/how-can-i-test-if-an-attribute-of-a-coredata-object-is-null

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!