2016-05-30 110 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以快速了解如何声明每种受支持类型的属性。