2015-05-05 25 views
7

İsteğe bağlı olarak bir coordinate eklenmiş olan Activity adlı bir hızlı modelim var. *** nedeniyle yakalanmamış istisna uygulaması sonlandırılması 'NSUnknownKeyException'RestKit RKObjectMapping Swift İsteğe Bağlı

2015-05-05 12: 14: 30,741 Numune [531558 54338]

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 
    } 
} 

bu ancak bana verir başvurumu çalıştırırken , sebep: '[setValue: forUndefinedKey:]: Bu sınıf, anahtar koordinatının kodlama uyumlu anahtar değeri değildir.'

İsteğe bağlı olmaması için coordinate değiştirir ve varsayılan bir uygulama çalıştırırsa.

Sorunuz, Restrem'i Optionals açısından nasıl hızlı bir şekilde kullanabilirim? çünkü bu hatlar

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

İsteğe bağlı özellik/değişken eşleştirmek istiyor ancak objectMapping() senin nil coordinate edilir çağrılırken o zamanlar bu olabilir sizin uygulama kilitlenmeleri Bence de

+0

Neden bunu düz sayı olduğunda bu isteğe olmak istiyorsun senin mülkiyet yap? Muhtemelen derleyici, eğer isteğe bağlıysa, özellikler için erişim sağlayıcıları üretmez ... – Wain

+0

Tüm aktivitelerin ekli bir enlem ve boylamı yoktur, bu yüzden isteğe bağlı olması için bunu yapacağını düşünmüştüm. Düzenli sayılar için puanınızı görüyorum ama aynı soruyu CLLocationCoordinate2D' –

+0

gibi daha karmaşık bir şey için pozlayabiliyordum. Bu yüzden hiçbir zaman RestKit kullanmamıştım. Bu yüzden iç işleyişten emin değilim ... Bu başlatıcı için 'RKAttributeMapping' ('RKAttributeMapping (fromKeyPath:" koordinat ", toKeyPath:" koordinat ")' ın başlatılmasında bu uygulamada bulundu ... başlatıcıdaki ilk kod satırı: 'NSAssert (sourceKeyPath || destinationKeyPath , "" Hem kaynak hem de hedef anahtar yolları sıfırlanamaz "). Bana göre bu, "koordinat" ın isteğe bağlı (ve dolayısıyla "nil") ve her iki tuş yolu için kullanıldığından (ve dolayısıyla her ikisinin de "nil") koda sebep olmasından kaynaklanıyor. –

cevap

-1

.

böyle bir şey denediniz mi:

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 
    } 
} 

umarım bu işe emin değilim ama let mapping = RKObjectMapping(forClass: self) senin tüm sınıf Activity Harita çalışıyor tahmin ve coordinate olarak belirlenmiştir değilken bu kodunuzu çöküyor bu zaman.

+0

'objectMapping' bir sınıf işlevidir. Koordinat bu bağlamda asla bir değere sahip olmazdı. –

0

dynamic

dynamic var coordinate: CLLocationCoordinate2D?