以下のようなGPXを読み込んで、Realmを用いて保存するプログラムを作成しました。ところが、データが変わってしまって、思うようにデータを取り出せません。RouteItem.route.map{$0.latitude}.max()!として座標の最大値を取りたいのですが...
print文の(1),(2)では正しく取得できるのですが、realm.add()以降は(3)で値が0.0となっており、(4)で取得できるようになっている状態です。(3)で取得できない理由と(2)で取得できる理由がよくわかりません。Realmと型についての知識が足りないのだと思いますが...
Swift
1class RouteItem: Object { 2 @objc dynamic var name = "" 3 @objc dynamic var secNum: Int = 0 4 var route = List<Point>() 5} 6 7class Point: Object { 8 @objc var longitude: Double = 0.0 9 @objc var latitude: Double = 0.0 10} 11 12class RouteManager: NSObject { 13 private var realm: Realm! 14 private var token: NotificationToken! 15 public private(set) var routeItems: Results<RouteItem>! 16 17 override init() { 18 super.init() 19 do { 20 realm = try Realm() 21 routeItems = realm.objects(RouteItem.self).sorted(byKeyPath: "name") 22 token = routeItems.observe { [weak self] _ in 23 NotificationCenter.default.post(name: .changedRouteItems, object: nil) 24 } 25 } catch { 26 print(error) 27 } 28 } 29 30 func createRoute(gpxURL: URL, routeName:String, sectionNum:Int) { 31 do { 32 let realm = try Realm() 33 34 let gpxreader = GPXReader() 35 let points = gpxreader.read(GPXUrl: gpxURL) // GPX(XMLを読み込んで、List<Point>()を返す 36 let routeItem = RouteItem() 37 38 routeItem.name = routeName 39 routeItem.secNum = sectionNum 40 routeItem.route = points 41 try! realm.write { 42 print("createFunc(1)",routeItem.route[0].latitude) 43 print("createFunc(2)",routeItem.route[0]["latitude"] 44 realm.add(routeItem) 45 print("createFunc(3)",routeItem.route[0].latitude) 46 print("createFunc(4)",routeItem.route[0]["latitude"] 47 } 48 } catch { 49 print(error) 50 } 51 } 52}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/20 08:37 編集
2019/08/20 12:47
2019/08/20 18:26 編集
2019/08/20 23:38
2019/08/21 03:35