Как сделать заявление if с NSNull в target-c - PullRequest
16 голосов
/ 26 сентября 2011

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

Однако, там есть данные типа даты, равные нулю.

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

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

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

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

Ответы [ 2 ]

38 голосов
/ 26 сентября 2011

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

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

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

if (arriveTime == nil) { NSLog(@"it's nil"); }
else if ([arriveTime isKindOfClass:[NSNull class]]) {
  ...
0 голосов
/ 26 сентября 2011

в одну строку

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