Realm Swift 返回所有 nil 值的对象

Posted

技术标签:

【中文标题】Realm Swift 返回所有 nil 值的对象【英文标题】:Realm Swift returning objects with all nil values 【发布时间】:2016-05-28 20:18:21 【问题描述】:

我正在使用 ObjectMapper 将 JSON 对象解析为 Realm。

我的班级旅行是这样的:

class Trip: Object, Mappable 
    dynamic var Id : String? = nil
    dynamic var CreatedOn : String? = nil
    dynamic var LastModified : String? = nil

    required convenience init?(_ map: Map) 
        self.init()
    

    func mapping(map: Map) 
        Id <- map["Id"];
        CreatedOn <- map["CreatedOn"];
        LastModified <- map["LastModified"];
    

我正在使用 Alamofire 调用 Web 服务请求:

Alamofire.request(.GET, path, headers: ["Token" : auth_token]).responseJSON  response in

    let dict : NSDictionary? = response.result.value as? NSDictionary

    let test = Mapper<Trip>().map(dict!)
    let realm = try! Realm()
    realm.beginWrite()
    realm.add(test!)
    try! realm.commitWrite()

    let alltrips : Results<Trip> = realm.objects(Trip)
    let firstTrip = alltrips.first

在上面的代码中,当我打印测试时,我得到:

(AwesomeApp.Trip?) test = 0x0000000154e8f0d0 
  RealmSwift.Object = 
    Realm.RLMObjectBase = 
      ObjectiveC.NSObject = 
    
  
  Id = "47d86d34-b6f2-4a9f-9e31-30c81a915492"
  CreatedOn = "2016-01-20T23:39:41.995Z"
  LastModified = "2016-01-20T23:44:39.363Z"

当我打印时,firstTrip,我得到

(AwesomeApp.Trip?) firstTrip = 0x0000000154f1f370 
  RealmSwift.Object = 
    Realm.RLMObjectBase = 
      ObjectiveC.NSObject = 
    
  
  Id = nil
  CreatedOn = nil
  LastModified = nil

我使用了领域浏览器,看起来值已正确写入数据库。但是,读取这些值会返回一个包含所有 nil 值的行程对象。这是为什么呢?

编辑:我使用 print (allTrips) 打印了 allTrips,然后打印出来:

Results<Trip> (
    [0] Trip 
        Id = 47d86d34-b6f2-4a9f-9e31-30c81a915492;
        CreatedOn = 2016-01-20T23:39:41.995Z;
        LastModified = 2016-01-20T23:44:39.363Z;
    
 )

【问题讨论】:

alltrips 的结果是什么? 在第一次编辑中添加了输出 我看不出first 来自alltrips.first... 嗯,当我使用print(firstTrip) 打印值时,我在控制台中看到了正确的结果。但是当我使用调试器打印 allTrips 或 firstTrip 的描述时,我得到了 nil 值 试试let firstTrip = alltrips[0],或let firstTrip = alltrips?.map $0 【参考方案1】:

Realm Object 子类的实例变量仅用于尚未添加到 Realm 的对象。在将对象添加到 Realm 之后,或者对于从 Realm 检索到的对象,对象的 getter 和 setter 直接从 Realm 访问数据,而无需使用实例变量。这就是实例变量没有您期望的值的原因。

【讨论】:

@RobertTuanVu 你节省了我的时间和精力。 ? 你知道有什么方法可以防止返回 nil 值吗?

以上是关于Realm Swift 返回所有 nil 值的对象的主要内容,如果未能解决你的问题,请参考以下文章

NSKeyedArchiver unarchiveObjectWithData 返回具有 nil 值的对象

Swift iOS Firebase - 如果FirebaseAuth.FIRUser对象不是nil,它上面的.email怎么可能返回nil?

在 Swift 4 中创建类的非零属性数组

如何在 Realm Swift 中使用 NOT IN

使用 Swift 过滤 Realm 对象

TabbarController 子控制器总是返回 nil - Swift 4