“错误:此对象在离线缓存中不可用”仅在 Parse 后端出现几次
Posted
技术标签:
【中文标题】“错误:此对象在离线缓存中不可用”仅在 Parse 后端出现几次【英文标题】:"error: This object is not available in the offline cache" occurs only some times with Parse backend 【发布时间】:2015-08-22 03:09:27 【问题描述】:我目前将解析后端添加到我的 ios 项目中,并将其定义为使用其本地数据存储。 这一切似乎工作正常,除了有时我收到“这个对象在离线缓存中不可用”据我所知,使用本地数据存储时根本没有缓存(在我的 AppDelegate 中启用它,如下所示:[解析 enableLocalDatastore];)。 问题是如果我重新打开应用程序,最终该对象将被成功检索。 有人遇到过这个问题吗?
编辑: 我打电话的顺序是
PFQuery *query = [PFQuery queryWithClassName:className];
[query fromLocalDatastore];
[query whereKey:someKey equalTo:someObject];
[query includeKey:@"someKey1"];
[query includeKey:@"someKey2"];
[query orderByAscending:@"date"];
[query findObjectsInBackground];
它为 ios sdk 8.0 构建并解析 sdk 1.7.2
谢谢!
【问题讨论】:
这里有同样的问题。如果我在在线查询(我也放置了 includeKey)之后进行此查询,但在关闭应用程序并重新启动它之后,本地查询(没有前面的在线刷新)失败并出现此错误,则不会发生。 第二次查询相同的对象类后出现相同的问题,但条件不同。查询包含数组关系。 我遇到了和 1.7.5 版本一样的问题。 有人找到解决方案了吗?同样的事情发生在我身上。 【参考方案1】:我在使用解析实时查询时收到此错误。我发现每当一个对象通过我的实时查询“更新”时,它需要完全重新固定才能让这个错误消失。我用名字固定。这是我的功能。
extension PFObject
func repin(className:String, completion: @escaping () -> Void)
self.unpinInBackground(withName: className) (success, error) in
if let error = error
print(error)
else
self.pinInBackground(withName: className) (success, error) in
if let error = error
print(error)
else
completion()
【讨论】:
【参考方案2】:我遇到了同样的问题。我的原因是我在代码中的两个位置固定了具有相同名称的相同查询对象。当我删除带有名称功能的引脚并简单地固定它们时。对我来说一切都很好。
【讨论】:
【参考方案3】:确保您还通过调用固定了任何可能与查询相关的对象
[query includeKey:@"someKey1"];
所有指向所有可能需要的对象的指针。
【讨论】:
【参考方案4】:在将其他对象固定到本地数据存储之前,您需要创建该不可用对象的强引用。如果没有强引用,对象将从离线缓存中清除,即使您固定的当前对象和其他对象将被保存。因此,当您重新查询时,您会收到上面的错误消息。
【讨论】:
以上是关于“错误:此对象在离线缓存中不可用”仅在 Parse 后端出现几次的主要内容,如果未能解决你的问题,请参考以下文章
导入导出的 Parse 数据后,PFFiles 出现 AWS S3 错误
Parse (iOS):除非用户已通过登录或注册进行身份验证,否则无法删除用户
W/System.err: com.parse.ParseRequest$ParseRequestException: i/o 失败