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
,