我在Azure上有一个SQL数据库,我想为我的iOS应用程序(在swift中)将它与领域同步。
为此,我创建了一个RESTAPI,它生成一个JSON,现在我想在领域中集成这个JSON。
为了做到这一点,我尝试遵循领域文档的解释,所以现在我已经:
领域表:
class tbl_test: Object {
dynamic var id:Int = 0
dynamic var name:String = ""
override class func primaryKey() -> String? {
return "id"
}
}
银行代码:
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。
运行程序时,出现以下错误消息:
[uuu nscfdictionary longlongvalue]:无法识别的选择器发送到
实例0x7FDCC8785820 2016-07-06 10:25:30.090
mydrawing[9436:2732447]***由于未捕获异常终止应用程序
'nsInvalidArgumentException',原因:'-[\nscfDictionary
longlongvalue]:无法识别的选择器发送到实例0x7FDCC8785820'
这是在领域中导入JSON的好方法吗?根据我的发现,没有正式的方法,但这种方法应该有效…
最佳答案
您面临的问题是,要传递给Realm.create(_:value:update:)
的数据的结构与方法期望的不匹配。它需要一个字典,其中键与模型类型上的托管属性对应,或者一个数组,其中每个托管属性都有一个元素。
反序列化JSON数据后,json
如下所示:
(
{
id = 1;
name = "My Name";
}
)
它是一个数组,包含一个字典元素。当您将此数组传递给
Realm.create(_:value:update:)
时,realm希望数组的第一个元素是用作id
类型上的tbl_test
属性的值。我怀疑您要做的是依次对数组的每个元素调用
Realm.create
,而不是对数组本身调用它。