2016-12-27 52 views
0

我目前正在使用最新的Kinvey SDK(版本3.3.5)將swift 2.3遷移到3的過程。自從1x版本以來,他們已經做了大量更新。我的問題是任何人都能夠成功地查詢PersistableKeyID字段並拉多個對象?Kinvey 3.3.5 SDK查詢Ids

我使用能夠使用「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' 

人對如何現在「裝入對象」現在已經貶值來執行這一點的想法?沒有交付「find(byIds)」,我可以找到。

回答

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

+0

我仍然收到了同樣的錯誤: 「無效的屬性名稱」,理由是:「財產‘_id’不是類型的對象中找到...' 我從後端收集的數據集合,它確實有一個「_id」屬性。我不知道爲什麼這不起作用。 – jbone107

+0

我已更新原始帖子,顯示使用Pranav的答案的嘗試。問題是「_id」參數無法識別。 – jbone107

+0

James, 我能夠重現該問題,並已升級爲工程。一旦我有更多的工程信息,我會盡快回復您。 謝謝, Pranav Kinvey MLIBZ-1613 –

0

回答:按照數據存儲指南適用於iOS,默認情況下 「.collection()」 的類型是 「緩存」 的。 「緩存」類型將在本地存儲數據。這就是爲什麼Realm版本現在包含在3x SDK版本中的原因。

我我的DataStore採集更新爲:

let sectionStore = DataStore<Section>.collection(.network) 

我說「網絡」,以強制查詢從後端,而不是緩存文件拉。這實際上將「_id」標識爲屬性,並且查詢成功。出於某種原因,「緩存」文件不會將其存儲爲屬性。

其他SDK回答過的問題

我有從Kinvey後端拉動NSNumber的一個問題。這最終成爲與「緩存」查詢相關的類似問題。我回顧了Realm支持網站,作爲嘗試解決這個問題的最後一招。我發現Realm實際上不支持類型「NSNumber」。取自

摘錄:https://realm.io/docs/swift/latest/ 領域支持以下屬性類型:BOOL,INT8,Int16的,的Int32,Int64的,雙,浮點,字符串的NSDate,NSData的和。

不幸的是,Kinvey不支持「Int」類型。作爲解決方法,我已將它們更改爲字符串,並在我提取數據後將其轉換回「Double」或其他類型。但是,如果我只使用「.network」集合類型,那麼NSNumber仍然有效。

謝謝, 詹姆斯