在Realm中导入JSON

时间:2016-07-06 08:49:37

标签: json swift realm

我在Azure上有一个SQL数据库,我想将它与Realm同步,用于我的iOS应用程序(在Swift中) 为此,我创建了一个生成JSON的REST API,现在我想在Realm中集成这个JSON。 为此,我尝试按照Realm文档中的说明进行操作,现在我已经:

领域表:

class tbl_test: Object {
    dynamic var id:Int = 0
    dynamic var name:String = ""

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

Swift Code:

let realm = try! Realm()
let stringTxt:String = "[{\"id\": 1, \"name\": \"My Name\"}]"
var myData = NSData()

if let dataFromString = stringTxt.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false) {
    let jsonData = JSON(data: dataFromString)
    if let encryptedData:NSData = try! jsonData.rawData() {
                myData = encryptedData
    }       
}

try! realm.write {
   let json = try! NSJSONSerialization.JSONObjectWithData(myData, options: NSJSONReadingOptions())
            realm.create(tbl_test.self, value: json, update: true)
}

我使用SwiftyJSON将我的字符串转换为JSON。

当我运行程序时,出现此错误消息:

  

[__ NSCFDictionary longLongValue]:发送到的无法识别的选择器   实例0x7fdcc8785820 2016-07-06 10:25:30.090   mydrawing [9436:2732447] ***由于未捕获的异常而终止应用程序   ' NSInvalidArgumentException',原因:' - [__ NSCFDictionary   longLongValue]:无法识别的选择器发送到实例0x7fdcc8785820'

在Realm中导入JSON是一种好方法吗?根据我的发现,没有正式的方法,但这种方法应该有效......

1 个答案:

答案 0 :(得分:2)

您遇到的问题是,您传递给Realm.create(_:value:update:)的数据结构与方法所期望的不匹配。它需要一个字典,其中的键对应于模型类型的托管属性,或者一个数组,每个托管属性都有一个元素。

反序列化JSON数据后,json看起来像这样:

(
        {
        id = 1;
        name = "My Name";
    }
)

这是一个包含单个元素的数组,它是一个字典。当您将此数组传递给Realm.create(_:value:update:)时,Realm希望数组的第一个元素是用作id类型的tbl_test属性的值。

我怀疑你的意思是依次在数组的每个元素上调用Realm.create,而不是在数组本身上调用它。