2016-12-24 8 views
0

如何在iOS应用程序中检索Realm对象数据?无法将类型Appdata的值转换为预期的参数类型Object.type Realm Swift

Object类是:

import Foundation 
import RealmSwift 


class AppData: Object { 

    dynamic var id = 0 
    dynamic var tokeType = "" 
    dynamic var token = "" 
    dynamic var refreshToken = "" 
    dynamic var accessToken = "" 

    override static func primaryKey() -> String? { 
    return "id" 
    } 

} 

我使用填充/更新AppData的领域对象下面的函数:

func register(_ instanceParameters : [String : AnyObject], completionHandler: @escaping ([Instance]?, NSError?) ->()) { 

    Alamofire.request(Router.register(instanceParameters)).responseJSON{ response in 

     var instance = [Instance]() 

     let AppDataObj = AppData() 
     let config = Realm.Configuration(
     schemaVersion: 1, 
     migrationBlock: { migration, oldSchemaVersion in 
      if (oldSchemaVersion < 1) { 
      } 
     }) 
     Realm.Configuration.defaultConfiguration = config 
     let realm = try! Realm() 


     switch response.result { 
     case .success(let json): 
     let responseObject = json as? [String: AnyObject] 
     instance.append(Instance(dictionary: responseObject!)) 

     AppDataObj.token = (instance.first?.token)! 
     AppDataObj.tokeType = "Instance_Token" 
     AppDataObj.id = 1 

     try! realm.write { 
      realm.add(AppDataObj, update: true) 
     } 
     completionHandler(instance, nil) 
     case .failure(let error): 
     completionHandler(nil, error as NSError) 
     } 
    } 
    } 

和目前一切OK了,你可以见下面我可以使用Realm Browser管理AppData对象:

enter image description here

我发现的问题是,当我需要使用的持久性的领域对象数据试图检索应用程序数据令牌:

import RealmSwift 

var AppDataObj = AppData() 

let data = realm.object(ofType: AppDataObj, forPrimaryKey: "id") 
loginParameters["token"] = AppDataObj.token as AnyObject? --> this line throws the error defined in the title of this question 

回答

0

你应该官方指南第https://realm.io/docs/swift/latest/

首先,当您想要获取持久对象时,不需要创建Realm对象的实例。

其次,您应该将实际值传递给forPrimaryKey参数,而不是属性名称。你保存的对象为id = 1,所以它应该是realm.object(ofType: AppDataObj, forPrimaryKey:)`。

object(ofType:forPrimaryKey:)方法返回一个Realm对象。所以一个正确的代码是:

import RealmSwift 

let data = realm.object(ofType: AppDataObj, forPrimaryKey: 1) 
loginParameters["token"] = data.token 
相关问题