Realm Object возвращает ноль (Swift)

У меня есть пользовательский объект многоугольника, поэтому я могу сохранить наложения карты в Realm. Я могу успешно создавать эти объекты, но когда я хочу получить объект var polygon, он возвращает nil. Когда я печатаю объект многоугольника, он распечатывает его хорошо, со всеми данными.

Это образец того, что он печатает.

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
}

2 ответа

Решение

String, Double а также Object свойства вашего Object подклассы должны быть объявлены с dynamic модификатор, позволяющий Realm переопределять метод получения и установки свойства. Без этого компилятор Swift будет напрямую обращаться к переменной экземпляра объекта, что не дает возможности Realm читать или записывать данные из файла Realm. См. Таблицу свойств модели Realm для краткого обзора того, как объявлять свойства каждого из поддерживаемых типов.

Если у вас есть проблемы с try Realm() возврате nilпопробуйте удалить приложение из вашего симулятора и перестроить. Изменение Object свойства по мере развития могут вызвать try Realm() возвращать nil,

Другие вопросы по тегам