2015-11-18 164 views
3

我存儲的對象以標準方式解析本地數據存儲:解析存儲本地數據存儲對象以緩存並清除它們?

[someObject pinInBackgroundWithName:someName]; 

一般情況下,這工作正常。但是,有時當我做了本地查詢,即

PFQuery *query = [SomeObject query]; 
[query fromLocalDatastore]; 
[query fromPinWithName:someName]; 
[query findObjectsInBackgroundWithBlock:block]; 

它似乎沒有本地對象,我得到的錯誤:

error NSError * domain: @"Parse" - code: 120 

我的理解是:

"Error code indicating the result was not found in the cache."

我以爲本地數據存儲和緩存是2個完全不同的存儲機制?然而,似乎我的數據被保存到緩存中,然後被刷新。這怎麼可能?本地數據存儲是沒有多大用處,如果它被沖刷掉我的控制...

UPDATE

我認爲它最初是因爲我訪問本地數據存儲,而在後臺寫它,因此得到沒有結果。但是把我的釘在主線程上並不能解決這個問題。

然後,我認爲這可能是一個遞歸固定的bug,因爲我的對象包含指針指向對象的指針。但是明確固定所有指針不會有幫助 - 無論是在後臺還是在主線程中。

我試着只是查詢沒有includeKey的對象,我認爲這意味着一致的返回,但是需要檢索剩餘數據的輔助查詢對於我正在嘗試執行的操作來說有點慢。

最後,我認爲它可能是做this bug

寫任何新數據顯示,除去所有先前的固定數據...

+0

確實,本地數據存儲和緩存是互斥的。我不知道你爲什麼會失去物體。 – Daniel

+0

不完全確定這是否是原因,但可能是某些對象尚未被提取。這是來自api文檔「如果這些其他對象還沒有從Parse中提取,它們將不會被存儲。」https://parse.com/docs/ios/api/Classes/PFObject.html#//api/name/pinInBackgroundWithName: – Yan

+0

嗯,對象本身,不僅僅是它引用的對象,甚至沒有被存儲。而且我知道這些物體已被取出,因爲我可以看到它們的屬性正確顯示。事情是,對象存儲和檢索得很好,直到出於某種原因它們似乎被擦除。或者至少查詢搜索緩存,而不會返回任何內容... – Smikey

回答

0

更新:我現在非常確定nil返回是因爲我包含沒有被提取的對象的鍵。因此,不是返回帶有nil對象的對象數組,而是返回nil。因此,如果您使用一堆包含密鑰來查詢本地數據存儲區,請確保首先在本地數據存儲區中存在所有包含的數據。否則它返回零。

原來的答覆:

我沒有設法想出解決辦法,但有一個變通。我試圖避免使用它,但經過幾天的擺弄,似乎是唯一的解決方案。

請勿在原始查詢中包含任何'includeKey'。至少在我看來,這樣做似乎抹去了本地數據存儲。任何後續查詢都可以正常工作,但如果退出應用程序並重新打開它或編寫任何新數據,則第一個查詢將始終清除存儲並返回nil對象。

因此,您需要查詢單個對象,然後在需要訪問指向的任何內容時執行fetchFromLocalDatastore。

我找到了建議herehere(謝謝@PowHu),但是我可以在網上找到關於該問題的其他信息。

+0

進一步的調查表明 - 包括鍵在本地查詢,但不包括鍵的鍵(即includeKey:@「something.other」)。對於在線查詢很好。 – Smikey

0

請檢查用於請求/存儲對象的查詢限制從默認limitSize = 100開始解析,並將其設置爲最大值1000(一次最多返回1000個結果)。

[query setLimit: 1000]; //the default is 100. 
+0

但我只需要最多27個物品。所以它低於100的限制。這與限制無關。 – Smikey

+0

您使用匿名用戶創建 – Idali

+0

您使用匿名用戶訪問嗎?如果是,那麼如果當前匿名用戶爲零,或者如果您創建了新用戶,則不再有權訪問該舊用戶的舊對象,必須請求新數據,並且應刷新所有舊數據(unpinAllObjects& clearAllCachedResults)。 – Idali

0

您試圖固定保存其他對象指針的對象。 這是一個parse.com本地數據存儲錯誤!這是一個解決方法:

Try to first pin the inner object and only after that pin the wrapper object.

+0

Thanks @hershalle - 指針是否可以固定在背景中,還是必須位於主線程中,以確保包裝對象一旦被固定就會被固定? – Smikey

相關問題