2016-05-30 4 views
5

У меня есть собственный объект многоугольника, поэтому я могу сохранить наложения карт в Realm. Я могу успешно создать эти объекты, но когда я хочу получить объект var polygon, он возвращает nil. Когда я печатаю объект polygon, он печатает его отлично, со всеми данными.Realm Object return 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; 
      }, . . . 
     ); 
    }; 
} 

Моя функция для загрузки данных из Realm

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, Double и Object свойства ваших Object подклассов должны быть объявлены с dynamic модификатора разрешить Realm переопределять getter и setter свойства. Без этого компилятор Swift будет напрямую обращаться к переменной экземпляра объекта, что не дает возможности Realm читать или записывать данные из файла Realm. См. Realm's model property cheatsheet для краткого обзора того, как объявлять свойства каждого из поддерживаемых типов.

Смежные вопросы