2013-07-10 3 views
1

Предупреждение о глухом вопросе ... Возможно, меня могут лишить сна, но я не могу понять этого.valueForKey return nil

'тока' является NSDictionary

if ([current valueForKey:@"name"] != nil) 
{ 
    NSLog(@"here %@", [current valueForKey:@"name"]); 
} 

Печатается

here John 
here Sam 
here <null> 
here <null> 
here Billy 

В случае, если не 'если хх! = Ноль' помешали аннулирует? 'name' существует в моем словаре, но значение имени может быть пустым.

+0

У вас есть решения? –

+1

'nil' и' null' или две совершенно разные вещи – Popeye

ответ

3

NSArray и NSDictionary не могут содержать значения nil. NSNULL был создан специально как заполнитель для ноля. Он может быть помещен в классы коллекции и занимает только место.

NSNull определяет одноэлементный объект, что означает, что существует только один экземпляр NSNull, но он может использоваться как можно больше мест.

И вам нужно проверить, как это ....

if (current != nil || [current valueForKey:@"name"] != [NSNull null]) 
{ 
     NSLog(@"here %@", [current valueForKey:@"name"]); 
} 

И я уверен, что вы получите этот выход .....

Выход

here John 
here Sam 
here Billy 
+2

Спасибо, но не должно быть && вместо || ? Не работал с ||, но, похоже, работает с && – Jason

+0

То, что вы здесь говорите, на самом деле неверно или минимально вводит в заблуждение. Вы можете вызвать 'valueForKey' в' NSDictionary' и получить 'nil', если нет пары ключей/значений. – Rog

+0

Теперь я думаю, что я прав ... –

0

попробуйте вот так,

if ([current valueForKey:@"name"] != nil | [current valueForKey:@"name"]!=[NSNull null]) 
{ 
    NSLog(@"here %@", [current valueForKey:@"name"]); 
} 
0
if ([[current valueForKey:@"name"] length]!=0) 
{ 
    NSLog(@"here %@", [current valueForKey:@"name"]); 
} 

Я думаю, это будет полезно для вас.

+1

Я бы использовал это. –