2010-09-20 3 views
5

Я создал класс, который имеет несколько свойств NSStrings. Если у меня есть объект этого класса, то как я могу узнать, является ли объект нулевым (т. Е. Все свойства NSString равны нулю).Как проверить, нет ли объекта nil

Мой класс выглядит следующим образом

// MyClass.h 
#import <Foundation/Foundation.h> 


@interface MyClass : NSObject <NSCoding> { 
NSString *string1; 
NSString *string2; 

} 
@property (nonatomic, retain) NSString *string1; 
@property (nonatomic, retain) NSString *string2; 

@end 

Я проверяю это так, и это не работает

if (SecondViewController.myObject==nil) { 
NSLog(@"the object is empty"); 
} 
+0

Что вы имеете в виду, не работает? Вы объект ноль, но код не выполняется? Попробуйте запустить программу в режиме отладки, чтобы узнать, что такое фактическое значение myObject. – Vladimir

+0

Я имею в виду, что инициализированный объект рассматривается как не-ниль, даже если я не дал строкам в объекте какое-либо значение. –

ответ

7

Если у меня есть объект этого класса, то как узнать, является ли объект нулевым (т. Е. Все свойства NSString равны нулю).

Объект не ноль, потому что все его свойства равны нулю. Тем не менее, если вы хотите знать, если оба строковые свойства вашего объекта равны нулю, то это будет делать трюк:

-(BOOL) bothStringsAreNil 
{ 
    return [self string1] == nil && [self string2] == nil; 
} 

Примечание: Я нахожусь в лагере, который не любит лечить указатели как булевы т.е. я предпочитаю вышеуказанное значение

-(BOOL) bothStringsAreNil 
{ 
    return ![self string1] && ![self string2]; 
} 

, который функционально идентичен.

3
if (!obj) 
    // obj = nil 

if (!obj.property) 
    // property = nil 

Чтобы проверить все свойства равны нулю, я думаю, что это будет лучше создать для вас специальный метод для вашего класса.

+0

Если (! Obj) не работает в моем классе. Я думаю, что он работает только с классами NS –

+0

if() проверяет, является ли значение false (0) или true (! = 0), поэтому он должен работать на любом типе - номере, c-указателе, объекте obj-c ... Может быть объект, который вы проверяете, просто не инициализирован? – Vladimir

+0

Я использую пользовательский класс. См. Мое редактирование. –

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