【问题标题】:Kinvey 3.3.5 SDK Query By IdsKinvey 3.3.5 SDK 按ID查询
【发布时间】:2016-12-27 22:13:51
【问题描述】:

我目前正在使用最新的 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'

既然“loadObjects”已被贬值,任何人都知道如何执行此操作?我找不到提供的“find(byIds)”。

【问题讨论】:

    标签: ios swift sdk kinvey


    【解决方案1】:

    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")
            }
        }
    

    谢谢, 普拉纳夫, 金维

    【讨论】:

    • 我仍然收到同样的错误:'无效的属性名称',原因:'在类型的对象中找不到属性'_id'...' 我从中提取的集合在后端有数据而且它确实有一个“_id”属性。我不确定为什么这不起作用。
    • 我已经更新了原始帖子,显示了使用 Pranav 的答案的尝试。问题是“_id”参数无法识别。
    • James,我能够重现该问题,并且已将其升级为工程。一旦我从工程部门获得更多信息,我会尽快回复您。谢谢,Pranav Kinvey MLIBZ-1613
    【解决方案2】:

    已回答:根据 iOS 数据存储指南,默认情况下“.collection()”的类型为“缓存”。 “缓存”类型将在本地存储数据。这就是为什么“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 仍然有效。

    谢谢, 詹姆斯

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-16
      • 1970-01-01
      • 1970-01-01
      • 2019-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多