3

我以标准方式将对象存储到 Parse 本地数据存储区:

[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."

我认为本地数据存储和缓存是两种完全不同的存储机制?然而,似乎我的数据被保存到缓存中,然后被刷新。这怎么可能?如果本地数据存储区被冲出我的控制范围,它就没有多大用处......

更新

我最初认为这是因为我在后台写入本地数据存储时正在访问它,因此得到 nil 结果。但是将我的固定放在主线程上并不能解决这个问题。

然后我认为这可能是递归固定的错误,因为我的对象包含指向带有指针的对象的指针。但是明确地固定所有指针并没有帮助——无论是在后台还是在主线程中。

我尝试只查询没有includeKey的对象,我认为这意味着一致的返回,但是检索剩余数据所需的辅助查询对于我正在尝试做的事情来说有点慢。

最后,我认为这可能与这个错误有关

写入任何新数据似乎都会删除所有以前固定的数据......

4

3 回答 3

0

请检查用于从 parse 请求/存储对象的查询限制,因为默认 limitSize = 100 并将其设置为最大值 1000(一次最多返回 1000 个结果)。

[query setLimit: 1000]; //the default is 100.
于 2015-11-26T23:04:40.080 回答
0

更新:我现在很确定返回 nil 是因为我包含了尚未获取的对象的键。因此,它不是返回一个附加了 nil 对象的对象数组,而是返回 nil。因此,如果您使用一堆包含键查询本地数据存储,请首先确保所有包含的数据都存在于本地数据存储中。否则返回零。

原答案:

我还没有设法解决这个问题,但有一个解决方法。我试图避免使用它,但经过几天的摆弄,这似乎是唯一的解决方案。

不要在原始查询中包含任何“includeKey”。至少在我的情况下,这样做似乎会擦除本地数据存储。任何后续查询都可以正常工作,但如果您退出应用程序并重新打开它,或写入任何新数据,第一个查询总是会擦除存储并返回 nil 对象。

因此,改为查询单个对象,然后在需要访问它指向的任何内容时 fetchFromLocalDatastore。

我在这里这里找到了建议(感谢@PowHu),但我在网上几乎找不到关于这个问题的其他信息。

于 2015-12-08T15:52:10.477 回答
0

您尝试固定包含指向其他对象的指针的对象。这是一个 parse.com 本地数据存储错误!这是一种解决方法:

尝试先固定内部对象,然后再固定包装器对象。

于 2016-02-13T10:21:35.003 回答