我目前正在使用最新的Kinvey SDK(版本3.3.5)完成将swift 2.3迁移到3的过程。自1x版本以来,他们已经做了大量的更新。我的问题是有没有人成功地能够查询PersistableKeyID字段并拉出多个对象?
我习惯使用" loadObjects"将一串字符串作为参数的函数。此函数已被折旧并替换为find(byId)。见下文:
dataStore.find(byId: "only takes one") { uClass, error in
if let uClass = uClass {
//succeed
print("UClass: \(uClass)")
} else {
//fail
}
问题是,它只需要一个字符串作为参数。我试图使用查询功能,但我不能让它采取" _id"字段作为参数。使用以下代码:
//Just statically creating the sectionID array for now. This will dynamically be created
testIDs = ["58668307206c11177e5ab0d4", "58668307206c11177e5ab0d4", "57ad00a505a2bb55632659c3"]
let sectionStore = DataStore<Section>.collection()
let sectionQuery = Query(format: "_id IN %@", testIDs)
sectionStore.find(sectionQuery) {sectionResult, error in
if let sectionResult = sectionResult {
self.sectionsTest = sectionResult
self.sectionCollectionView.reloadData()
} else{
//Error
}
}
我收到错误:
'Invalid property name', reason: 'Property '_id' not found in object of type 'Section'
现在任何人都知道如何执行此操作&#34; loadObjects&#34;已折旧?没有交付&#34;发现(byIds)&#34;我能找到。
答案 0 :(得分:0)
Jbone107,
我能够得到这个结果,如果以下内容适合您,请告诉我。
let id:[String] = ["5855026650a816ec29012908","5855024a21400c5b492bea20"]
let query = Query(format: "_id IN %@", id)
dataStore.find(query) { data, error in
if let data = data {
//succeed
print(“Data: \(data)")
} else {
//fail
print("fetching failed")
}
}
谢谢, Pranav, Kinvey
答案 1 :(得分:0)
已回答:根据iOS数据存储指南,默认情况下“.collection()”的类型为“cache”。 “缓存”类型将在本地存储数据。这就是为什么“Realm”现在包含在版本3x SDK中的原因。
我将我的DataStore集合更新为:
let sectionStore = DataStore<Section>.collection(.network)
我添加了“.network”来强制查询从后端而不是缓存文件中提取。这实际上将“_id”标识为属性,并且查询成功运行。由于某种原因,“缓存”文件不会将其存储为属性。
其他SDK问题已回答
我遇到了从Kinvey后端拉出NSNumber的问题。这最终成为与“缓存”查询相关的类似问题。我回顾了Realm支持网站,作为尝试解决这个问题的最后手段。我发现Realm实际上并不支持“NSNumber”类型。
摘自:https://realm.io/docs/swift/latest/ Realm支持以下属性类型:Bool,Int8,Int16,Int32,Int64,Double,Float,String,NSDate和NSData。
不幸的是,Kinvey不支持“Int”类型。作为一种解决方法,我已经将它们更改为字符串,我只是在拉取数据后转换回“Double”或其他类型。但是,如果我只使用“.network”集合类型,那么NSNumber仍然有用。
谢谢, 詹姆斯