2014-03-24 5 views
8
NSDictionary *regionDict = (NSDictionary *) region; 
      NSNumber *lat = [regionDict objectForKey:@"lat"]; 
      //[latitude addObject:lat]; 
      NSNumber *lng = [regionDict objectForKey:@"lng"]; 
      //[longitude addObject:lng]; 
      NSLog(@"%@%@%@",lat,lng,titles); 

      if(lat == [NSNumber numberWithFloat:0.00] && lng == [NSNumber numberWithFloat:0.00]) 
      { 
       NSLog(@"%@%@%@",lat,lng,titles); 
      } 
      else 
      { 
       CLLocationCoordinate2D coord; 
       coord.latitude =lat.doubleValue; 
       coord.longitude =lng.doubleValue; 
       MapViewAnnotation *annotation =[[MapViewAnnotation alloc]initWithTitle:titles AndCoordinate:coord]; 
       [self.mapView addAnnotation:annotation]; 
      } 

의 NSNumber의 NULL 값으로 확인하지 때문에 조건이 만족하지 않은 경우. 내가 확인할 수있는 방법은 무엇입니까? null을 확인하는 방법을 알려주십시오. 객체가어떻게 NSNumber가 null인지 확인할 수 있습니까?

if ([myObject isKindOfClass:[NSNull class]]) 

을 수행하여 null의 경우

+0

경우 지역 사전에서 오는? 첫 번째 NSLog는 정확히 무엇을 인쇄합니까? – Anna

답변

6

확인해 볼 수 있습니다하지만 당신이 NSNumber에 박스를 float가 제로 있는지 확인하려는 경우, 당신은

if (lng.floatValue == 0. && lat.floatValue == 0) 
+1

NSInvalidArgumentException ', 이유는 :'- [NSNull하는 FloatValue] : 오류가 @Cyrille –

+1

네, 당신은 *의 언 박싱 전에 NSNull' *'확인해야 주어진다. – Cyrille

+0

고마워요 !! 오브젝트가 동일한에이 일부 가장자리의 경우 (문자열 리터럴)에서 작동 할 수있는 경우 –

0
  NSDictionary *regionDict = (NSDictionary *) region; 
      NSNumber *lat; 
      if([regionDict objectForKey:@"lat"] == [NSNull null]) 
      { 
       lat = 0; 
      } 
      else 
      { 
       lat = [regionDict objectForKey:@"lat"]; 
      } 
      NSNumber *lng; 
      if([regionDict objectForKey:@"lng"] == [NSNull null]) 
      { 
       lng=0; 
      } 
      else 
      { 
      //[latitude addObject:lat]; 
       lng = [regionDict objectForKey:@"lng"]; 
      } 
      //[longitude addObject:lng]; 


      if(lat.floatValue == 0.00 && lng.floatValue == 0.00) 
      { 
       NSLog(@"%@%@%@",lat,lng,titles); 
      } 
      else 
      { 
       NSLog(@"%@%@%@",lat,lng,titles); 
       CLLocationCoordinate2D coord; 
       coord.latitude =lat.doubleValue; 
       coord.longitude =lng.doubleValue; 
       MapViewAnnotation *annotation =[[MapViewAnnotation alloc]initWithTitle:titles AndCoordinate:coord]; 
       [self.mapView addAnnotation:annotation]; 
      } 
0

을 수행 할 수 있습니다 나는 당신이 무엇을 확인하길 원하는지 분명하지 않다. 당신의 JSON 데이터에 따라 다음 중 하나를 얻을 것이다 : JSON 데이터가 "널 (null)"인 경우 충돌합니다있는 doubleValue을 읽는 것을

myObject == nil - the object isn't there at all. 
myObject == [NSNull null] - the JSON data is "null" without the quotes 
myObject.doubleValue == 0.0 - the JSON data contained a number 0 or 0.0 

참고, 그래서 먼저 확인해야한다고. 비교

myObject == [NSNumber numberWithDouble:0.0] 

은 단지 객체 포인터를 비교하기 때문에 작동하지 않습니다. 이것이 실제로 같은 목적이라면 매우 큰 우연 일 것입니다.

+0

'=='검사 정체성 @Cyrille 만 확인합니다. 대신에 [myObject isEqualToNumber : @ (0.0)]'을 사용하십시오. – vikingosegundo

+0

난을 확인하는 것을 선호 [myObject에 ISEQUAL [NSNull 널] 일관성 ==을 사용하여 대. –

2

NSDecimalNumber 사용 null의 경우 내가 확인했습니다 : 이것은 나를 위해 큰 노력

if (decimalNumber == nil) 

.

+0

간단하고 작동합니다! – Ryan

+0

속성 또는 코어 데이터 속성을 관찰하는 경우는, 예를 들어, 대부분의 경우에 작동하지만. observeValueForKeyPath : ofObject : change : context :에 의해 전달 된 변경 사전은 'nil'로 평가되지 않는 null 값을 포함 할 수 있습니다. 그러므로 'NSNumber * oldNumber = [change valueForKey : NSKeyValueChangeOldKey];' (oldNumber! = nil) 테스트를 통과하지만 'oldNumber.integerValue'와 같은 것이 예외를 throw합니다. –

0
[obj isKindOfClass:[NSNull class]] 
관련 문제