Почему эта нулевая проверка не проходит?

Я использую этот простой код, чтобы проверить, является ли объект NSString нулевым, но по какой-то причине он терпит неудачу

вот моя простая проверка

NSString *imageUrl = [dict objectForKey:@"imageUrl"];

    NSLog(@"Jonge: %@", imageUrl);

    if(![imageUrl isEqual:[NSNull null]]) {
        NSLog(@"In the loop");
        NSURL *url = [[NSURL alloc]initWithString:imageUrl];
        NSData *data =[NSData dataWithContentsOfURL:url];
        cell.imageView.image = [UIImage imageWithData:data];
    }

Отладка ясно показывает, что объект имеет значение null следующим образом

2017-10-23 11:48:22.711228+0800 NWMobileTill[46614:7498779] Jonge: (null)

Но я все еще в конечном итоге в цикле, как показано ниже

2017-10-23 11:48:22.711367+0800 NWMobileTill[46614:7498779] In the loop

Почему мой нулевой чек не работает?

3 ответа

Решение

(null) представляет собой nilне [NSNull null]так что проверка imageUrl != NSNull преуспевает.

Вы должны написать

if (imageUrl) {

который так же, как

if (imageUrl != nil) {

Вы также можете проверить, пустая строка или нет.

if(![imageUrl isEqualToString:@""])

Или же

if(![imageUrl isKindOfClass:[NSNull class]])

nil ничего не представляет или в техническом плане, мы можем сказать, что '\0' (согласно концепции C). Когда мы создаем экземпляр какого-либо класса, по умолчанию Objective C делает его нулевым.

[NSNull null] даст объект. В Задаче C использование NSNull ограничено. Используется в коллекциях (например, NSArray а также NSDictionary)

Поскольку вы используете NSDictionary, вы можете проверить его, как показано ниже.

if ([dict objectForKey:@"imageUrl"] != [NSNull null]) {
    //your code...
}
Другие вопросы по тегам