gpt4 book ai didi

ios - Parse.com saveEventually with callback 并使用 NSCache 存储数据

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:21:46 25 4
gpt4 key购买 nike

Parse.com 有一个 saveEventually 选项,可将数据存储到磁盘并等待网络连接继续并将其保存到服务器。

但是,有时当网络连接可用并且用户快速切换屏幕时,新数据尚未保存到服务器,导致 View 显示旧数据。

对于 parse.com 用户,当我运行新的 query 并且 saveEventually 调用尚未完成时,会发生这种情况。

我想实现自己的缓存系统。

我想在完成时调用带有回调的saveEventually,然后我会删除缓存的数据。

这样,我可以在建立网络连接之前先检查是否有缓存数据。

我想我可以使用 NSCacheNSDiscardableContent 来完成,我已经阅读了文档,但是如果我能看到一些简单的示例代码来创建这些对象并将它们存储在用户的设备上。

有什么建议吗?

更新:

好的,这是一个变通解决方案的想法。

我调用 saveEventually 的每个对象都将添加到 NSArray 并将其存储在 documentsDirectory 中,然后,在 saveEventually 完成 我将删除 documentsDirectory 中的 array

如果应用程序在完成之前关闭,我不会得到回调,但这不会成为问题,因为我将在服务器上执行查询并获取存储的NSArray 在设备中,然后我会创建一个唯一的数组,优先考虑 documentsDirectory 中的对象。

我认为这可行。我担心的是它是否会使我的应用程序变慢。

有什么想法吗?

最佳答案

我没试过这个,但是如何设置查询的缓存策略,比如:

query.cachePolicy = kPFCachePolicyCacheElseNetwork;

如果 saveEventually 使用的是常规解析缓存,那么它应该会按照您的意愿执行。

编辑 - 由于上面的方法显然行不通,我可以想到几种方案来使用你自己的缓存,但它们都被基本的竞争条件问题所困:说你保存最终,再查询。假设您已修复查询代码以获取最终保存的本地对象。

如果您修改缓存对象并最终(再次)保存它会怎样?我们知道 parse 会正确序列化这两个保存吗?

如果您不担心这一点(也许第二个查询永远不会生成保存,或者您愿意在竞争条件下掷骰子),那么您有很多选择。让我们采取直截了当的方式:

创建一个带有 NSCache 属性的单例。提供这些位于其公共(public)接口(interface)中的方法...

// call this instead of saveEventually
- (void)cacheThenSaveEventually:(NSArray *)pfObjects {
for (PFObject *object in pfObjects) {
[self.cache setObject:object forKey:[object objectId]];
[object saveEventually:^(BOOL success) {
if (success) [self.cache removeObjectForKey:[object objectId]];
}];
}
}

// call this with the result of a query that might have been in a race with saveEventually
- (NSArray *)freshenUpResults:(NSArray *)pfObjects {
NSMutableArray *fresherObjects = [NSMutableArray array];
for (PFObject *object in pfObjects) {
PFObject *fresher = [self.cache objectForKey:[object objectId]];
[fresherObjects addObject:(fresher)? fresher : object];
}
return [NSArray arrayWithArray:fresherObjects];
}

关于ios - Parse.com saveEventually with callback 并使用 NSCache 存储数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25143199/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com