2016-02-17 108 views
5

我使用ObjectMapper将JSON对象解析为Realm。领域Swift返回所有零值的对象

我的班级旅行看起来是这样的:

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 
} 

我使用了Realm浏览器,它看起来像数值已被正确写入数据库。但是,读取值将返回具有全部零值的跳闸对象。为什么是这样 ?

编辑:我用印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; 
    } 
) 
+0

'alltrips'的结果是什么? –

+0

在第一次编辑中添加了输出 –

+0

我没有看到'all'首先出现在'alltrips.first'中...... –

回答

2

一个境界Object子类的实例变量只用于那些尚未被加入到一个域对象。将对象添加到Realm或从Realm中检索对象后,对象获取器和设置器将直接从Realm访问数据,而不使用实例变量。这就是实例变量没有你期望的值的原因。

+0

嗨@bdash,你在哪里找到这些信息? – Zeb

+2

我在Realm上工作。 – bdash

+0

@bdash那么解决方案是什么?谢谢! –