Почему эта нулевая проверка не проходит?
Я использую этот простой код, чтобы проверить, является ли объект 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...
}