Kinvey 3.3.5 SDK查询由Ids

时间:2016-12-27 22:13:52

标签: ios swift sdk kinvey

我目前正在使用最新的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;我能找到。

2 个答案:

答案 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仍然有用。

谢谢, 詹姆斯