2014-03-24 6 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]; 
      } 

Wenn die Bedingung nicht erfüllt ist, weil NSNumber nicht mit Nullwert überprüft wird. was kann ich überprüfen? Erzähl mir mögliche Möglichkeiten .. zur Überprüfung Null.Wie kann ich überprüfen, NSNumber ist null?

+0

Woher kommt das Regionswörterbuch? Was genau druckt der erste NSLog? – Anna

Antwort

6

können Sie überprüfen, ob ein Objekt, indem Sie

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

null ist, aber wenn man in einem NSNumber wenn ein Schwimmer boxed überprüfen möchten Null ist, können Sie

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

NSInvalidArgumentException ', Grund:' - [NSNull floatValue]: Fehler wird ausgegeben @Cyrille –

+1

Ja, Sie sollten nach 'NSNull' * vor * Unboxing suchen. – Cyrille

+0

Vielen Dank !! @Cyrille –

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

tun Mir ist nicht ganz klar, was du überprüfen willst. Abhängig von Ihrer JSON-Daten, werden Sie eine der folgenden erhalten:

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 

Beachten Sie, dass double zu lesen versuchen, stürzt ab, wenn die JSON-Daten „null“ war, so dass zunächst muss überprüft. Vergleichen

myObject == [NSNumber numberWithDouble:0.0] 

wird nicht funktionieren, denn das vergleicht nur Objektzeiger. Wäre ein sehr großer Zufall, wenn das eigentlich das gleiche Objekt wäre.

+0

'==' überprüft die Identität, aber um zu prüfen, ob Objekte gleich sind, funktioniert es möglicherweise nur in einigen Randfällen (String-Literale). Verwenden Sie stattdessen "[myObject isEqualToNumber: @ (0.0)]". – vikingosegundo

+0

Ich überprüfe lieber nach [myObject isEqual: [NSNull null]] und verwende aus Gründen der Konsistenz ==. –

2

Ich habe überprüft worden, ob NSDecimalNumber null war mit:

if (decimalNumber == nil) 

Das ist für mich großartig funktioniert.

+0

Einfach und es funktioniert! – Ryan

+0

Dies funktioniert in den meisten Fällen, jedoch nicht zum Beispiel, wenn eine Eigenschaft oder ein Core Data-Attribut beobachtet wird. Das von observeValueForKeyPath übergebene Änderungswörterbuch: ofObject: change: context: kann einen Nullwert enthalten, der nicht zu 'nil' ausgewertet wird. Also 'NSNumber * oldNumber = [ändern valueForKey: NSKeyValueChangeOldKey];' wird den Test (oldNumber! = nil) bestehen, aber etwas wie 'oldNumber.integerValue' wird eine Ausnahme auslösen. –

0
[obj isKindOfClass:[NSNull class]]