2016-05-30 23 views
5

Ho un oggetto poligono personalizzato in modo da poter salvare gli overlay delle mappe su Reame. Sono in grado di creare questi oggetti con successo, ma quando voglio recuperare l'oggetto poligono var restituisce nil. Quando stampo l'oggetto poligono, lo stampa bene, con tutti i dati.Oggetto reame restituito nil (Swift)

Questo è un esempio di ciò che viene stampato.

CustomPolygon { 
    name = Polygon1; 
    id = p1; 
    polygon = Polygon { 
     coordinates = RLMArray <0x7f928ef36230> (
      [0] Coordinate { 
       latitude = -36.914167; 
       longitude = 174.904722; 
      }, 
      [1] Coordinate { 
       latitude = -36.9325; 
       longitude = 174.957222; 
      }, . . . 
     ); 
    }; 
} 

mia funzione per il caricamento dei dati dal Regno

func loadOverlaysFromRealm(){ 

    do { 

     let realm = try Realm() 

     let polygons = realm.objects(CustomPolygon) 

     for p in polygons { 

      var coordinates = [CLLocationCoordinate2D]() 

      print(p) // !!!!! prints out what is above 
      print(p.polygon) // !!!!! Returns nil. 

      if let coordinateList = p.polygon?.coordinates as? List<Coordinate> { 

       for coordinate in coordinateList { 
        coordinates.append(CLLocationCoordinate2DMake(coordinate.latitude, coordinate.longitude)) 
       } 
      } 
      print(coordinates) // prints "[]" 
      let polygon = MKPolygon(coordinates: &coordinates, count: coordinates.count) 
      self.map.addOverlay(polygon) 

     } 

    } catch let error as NSError { 
     print(error.localizedDescription) 
    } 
} 

mie classi

class CustomPolygon: Object { 

    var name:String = "" 
    var id:String = "" 
    var polygon:Polygon? = nil 

} 

class Polygon: Object { 
    var coordinates = List<Coordinate>() 
} 

class Coordinate: Object { 
    var latitude:Double = 0.0 
    var longitude:Double = 0.0 
} 

risposta

9

Il String, devono essere dichiarati con il dynamic modificatore Double e Object proprietà degli Object sottoclassi consentire al reame di scavalcare il getter e il setter della proprietà. Senza questo il compilatore Swift accederà direttamente alla variabile di istanza dell'oggetto, che non fornisce alcuna opportunità per Realm di leggere o scrivere dati dal file Realm. Vedi Realm's model property cheatsheet per una rapida panoramica su come dichiarare le proprietà di ciascuno dei tipi supportati.

Problemi correlati