我在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是一种好方法吗?根据我的发现,没有正式的方法,但这种方法应该有效......
答案 0 :(得分:2)
您遇到的问题是,您传递给Realm.create(_:value:update:)
的数据结构与方法所期望的不匹配。它需要一个字典,其中的键对应于模型类型的托管属性,或者一个数组,每个托管属性都有一个元素。
反序列化JSON数据后,json
看起来像这样:
(
{
id = 1;
name = "My Name";
}
)
这是一个包含单个元素的数组,它是一个字典。当您将此数组传递给Realm.create(_:value:update:)
时,Realm希望数组的第一个元素是用作id
类型的tbl_test
属性的值。
我怀疑你的意思是依次在数组的每个元素上调用Realm.create
,而不是在数组本身上调用它。