Как сделать оператор if с помощью NSNull в objective-c

Я разрабатываю приложение для iPhone, в котором мне нужно использовать JSON для получения данных с сервера. На стороне iPhone я конвертирую данные в NSMutableDictionary.

Однако данные типа даты имеют значение null.

Я использую следующее предложение для чтения даты.

NSString *arriveTime = [taskDic objectForKey:@"arriveTime"];
NSLog(@"%@", arriveTime);

if (arriveTime) {
    job.arriveDone = [NSDate dateWithTimeIntervalSince1970:[arriveTime intValue]/1000];
}

Когда returnTime равно null, как я могу сделать оператор if. Я попробовал [incomingTime length]!= 0, но я не работаю, потому что returnTime является NSNull и не имеет этого метода.

Ответы

Ответ 1

экземпляр NSNull является одноэлементным. вы можете использовать простое сравнение указателей для этого:

if (arriveTime == nil) { NSLog(@"it nil"); }
else if (arriveTime == (id)[NSNull null]) { // << the magic bit!
  NSLog(@"it NSNull");
}
else { NSLog(@"it %@", arriveTime); }

альтернативно, вы можете использовать isKindOfClass:, если вы найдете это более ясным:

if (arriveTime == nil) { NSLog(@"it nil"); }
else if ([arriveTime isKindOfClass:[NSNull class]]) {
  ...

Ответ 2

В одной строке

arriveTime ? job.arriveDone = [NSDate dateWithTimeIntervalSince1970:[arriveTime intValue]/1000]; : NSLog(@"Arrive time is not yet scheduled");