2014-10-28 6 views
0

Я хочу проверить, установлен ли атрибут NSNumber подкласса NSManageObject или нет. Обратите внимание, что атрибут имеет NSNumber/Integer16 Я пытался несколько подходов, но ни один не работал (они ниже всегда оценивают ложь):Как проверить, является ли атрибут объекта CoreData нулевым?

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

Может кто-нибудь просветить меня и объяснить, почему они не работают?

+0

Что 'patient.zyklus_laenge' возвращения в командной строке , когда его нет? –

+0

NSLog показывает: 'patient.zyklus_laenge: (null)' – mrd

+0

Попробуйте переключить «isEqual:» на «==» – WMios

ответ

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

в

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

Это работает, но это дает мне предупреждение компилятора: Несовместимые типы указателей. Я нашел другое решение, см. Ниже – mrd

+0

Возможно, он имел в виду '[NSNull class]'? – Mundi

+0

есть, только ошибка. – ekiyanov

0

Решение установить атрибут в основных данных в соответствии с требованиями со значением по умолчанию и проверить с помощью этого кода:

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

Если у вас есть по умолчанию значение, установленное для атрибута, будет значением по умолчанию, которое обычно равно 0, а не null.

Если да, то вы можете проверить следующее:

if (patient.zyklus_laenge.intValue == 0)

В противном случае, эта проверка нуля может быть использована:

if (patient.zyklus_laenge != nil)

Смежные вопросы