2016-05-30 29 views
5

Tôi có đối tượng đa giác tùy chỉnh để tôi có thể lưu lớp phủ bản đồ vào Realm. Tôi có thể tạo ra các đối tượng này thành công, nhưng khi tôi muốn lấy đối tượng var đa giác nó trả về nil. Khi tôi in đối tượng đa giác, nó in ra tốt, với tất cả dữ liệu.Đối tượng Realm trả về nil (Swift)

Đây là mẫu của nội dung in ra.

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; 
      }, . . . 
     ); 
    }; 
} 

Chức năng của tôi cho dữ liệu tải từ 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) 
    } 
} 

Lớp học của tôi

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 
} 

Trả lời

9

Các String, DoubleObject thuộc tính của Object lớp con của bạn cần phải được khai báo với dynamic modifier để cho phép Realm ghi đè lên getter và setter của thuộc tính. Nếu không có trình biên dịch Swift này sẽ truy cập trực tiếp biến của đối tượng, mà không cung cấp bất kỳ cơ hội nào cho Realm để đọc hoặc ghi dữ liệu từ tệp Realm. Hãy xem model property cheatsheet của Realm để biết tổng quan nhanh về cách khai báo các thuộc tính của từng loại được hỗ trợ.

Các vấn đề liên quan