2015-05-05 26 views
7

Ich habe ein schnelles Modell namens Activity, an das optional ein coordinate angehängt werden kann.RestKit RKObjectMapping Swift Optional

import MapKit 

class Activity: NSObject { 

    var coordinate: CLLocationCoordinate2D? 

    class func objectMapping() -> RKObjectMapping { 
     let mapping = RKObjectMapping(forClass: self) 

     let coordinateMapping = RKAttributeMapping(fromKeyPath: "coordinate", toKeyPath: "coordinate") 
     coordinateMapping.valueTransformer = RKCLLocationCoordinate2DValueTransformer() 
     mapping.addPropertyMapping(coordinateMapping) 

     return mapping 
    } 
} 

Wenn meine Anwendung startet aber das gibt mir:

2015-05-05 12: 14: 30,741 Probe [54338: 531558] *** App beenden aufgrund nicht abgefangene Ausnahme 'NSUnknownKeyException' , Grund: '[setValue: forUndefinedKey:]: Diese Klasse ist für die Schlüsselkoordinate nicht Schlüsselcodierung-kompatibel.'

Wenn ich coordinate als nicht optional und liefern eine Standard die Anwendung läuft ändern.

Also meine Frage ist, wie verwende ich RestKit in swift in Bezug auf Optionals?

+0

Warum Sie es optional sein wollen, wenn es sich um eine einfache Zahl ist? Vermutlich generiert der Compiler keine Accessoren für die Eigenschaften, wenn sie optional sind ... – Wain

+0

Nicht alle Aktivitäten haben eine angefügte Breite und Länge, also dachte ich, sie würde es machen, da es optional ist. Ich sehe Ihren Punkt für reguläre Zahlen, aber ich könnte die gleiche Frage für etwas Komplexeres stellen wie 'CLLocationCoordinate2D' –

+0

Ich habe nie RestKit verwendet, also bin ich mir der internen Abläufe nicht sicher ... jedoch habe ich die Quelle & fand dies in der Implementierung für den Initialisierer für 'RKAttributeMapping' (' RKAttributeMapping (fromKeyPath: "Koordinate", toKeyPath: "Koordinate") ') ... die erste Codezeile im Initialisierer ist:' NSAsssert (sourceKeyPath || destinationKeyPath , @ "Sowohl der Quell - als auch der Zielschlüsselpfad können nicht Null sein"); '. Für mich würde dies bedeuten, dass der Absturz verursacht wird, da & ldquor; Koordinate "optional ist (& somit & ldquor; Null") und & ldquor; Koordinate "für beide Schlüsselwege verwendet wird (& somit beide & ldquor; Null"). –

Antwort

-1

Meiner Meinung nach Ihre App stürzt ab, weil dieser Linien

let mapping = RKObjectMapping(forClass: self) let coordinateMapping = RKAttributeMapping(fromKeyPath: "coordinate", toKeyPath: "coordinate")

Sie möchten eine optionale Eigenschaft/Variable abzubilden, aber es könnte, dass zu der Zeit, wenn Sie objectMapping() Aufruf Ihre coordinate Null ist.

Haben Sie so etwas wie dies versucht:

import MapKit 

class Activity: NSObject { 

    var coordinate: CLLocationCoordinate2D? 

    class func objectMapping() -> RKObjectMapping { 

     if let c = self. coordinate { 
      let mapping = RKObjectMapping(forClass: self) 

      let coordinateMapping = RKAttributeMapping(fromKeyPath: "coordinate", toKeyPath: "coordinate") 
      coordinateMapping.valueTransformer = RKCLLocationCoordinate2DValueTransformer() 
      mapping.addPropertyMapping(coordinateMapping) 

      return mapping 
     } 
     return nil 
    } 
} 

Ich bin nicht sicher, ob das funktioniert, aber ich denke let mapping = RKObjectMapping(forClass: self) versucht, Ihre ganze Klasse Activity Karte und diese stürzt Code, wenn coordinate bei nicht gesetzt diesmal.

+0

'objectMapping' ist eine Klassenfunktion. "Koordinate" würde in diesem Zusammenhang niemals einen Wert haben. –

0

Machen Sie Ihre Immobilie dynamic

dynamic var coordinate: CLLocationCoordinate2D? 
Verwandte Themen