2016-05-30 69 views
5

我有一個自定義多邊形對象,所以我可以將地圖疊加保存到Realm。我能夠成功創建這個對象,但是當我想要檢索var多邊形對象時,它返回nil。當我打印多邊形對象時,它會將所有數據打印出來。Realm Object返回nil(Swift)

這是打印出來的樣本。

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; 
      }, . . . 
     ); 
    }; 
} 

我的函數加載數據從境界

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

我的課表

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 
} 

回答

9

String,你Object子類DoubleObject屬性需要與dynamic修飾符聲明允許Realm重寫屬性的getter和setter。如果沒有這個,Swift編譯器將直接訪問對象的實例變量,這不會爲Realm提供從Realm文件讀取或寫入數據的機會。請參閱Realm的model property cheatsheet以快速瞭解如何聲明每種受支持類型的屬性。