2016-12-24 7 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 
相關問題