我的应用是一种消息传递风格的应用,您可以在其中标记"标记"另一个用户。 (有点像推特)。
现在,当显示此消息时,属于被标记的人的头像将显示该消息。
用户的头像存储为PFUser对象的PFFile。
我正在装载类似的东西......
PFImageView *parseImageView = ...
[taggedUser fetchIfNeededInBackgroundWithBlock:^(PFObject *user, NSError *error) {
parseImageView.file = user[@"avatar"];
[parseImageView loadInBackground];
}];
一切正常。
如果需要,部分代码的负载大部分时间都不会触及网络,因为大多数时候它都会缓存用户数据。
但是,获取图像并将其放入图像视图的背景部分中的负载每次都会运行。根本没有对PFFile数据进行任何缓存。
即使在多次下载同一个用户的头像之后,它仍然会通过网络获取它。
有没有办法让这些数据缓存,或者这是我必须自己实现的?
答案 0 :(得分:6)
如果以前的PFQuery使用缓存策略,PFFile会自动为您缓存文件,如:
PFQuery *query = [PFQuery queryWithClassName:@"MyClass"];
query.cachePolicy = kPFCachePolicyCacheThenNetwork;
要检查PFFile是否在本地缓存中,请使用:
@property (assign, readonly) BOOL isDataAvailable
例如:
PFFile *file = [self.array objectForKey:@"File"];
if ([file isDataAvailable])
{
// no need to do query, it's already there
// you can use the cached file
} else
{
[file getDataInBackgroundWithBlock:^(NSData *data, NSError *error)
{
if (!error)
{
// use the newly retrieved data
}
}];
}
希望有所帮助:)
答案 1 :(得分:0)
最后,我创建了一个带有NSCache
的单例并在进入Parse之前查询了它。
暂时停止工作。当然,这意味着每个新会话都必须再次下载所有图像,但它现在比现在好多了。
答案 2 :(得分:-1)
您可以像下面的代码一样缓存PFQuery的结果。并且需要检查缓存,而不是每次都在后台查找对象。同时检索图像。它还有一些其他缓存策略..请检查附加的链接.. < / p>
PFQuery *attributesQuery = [PFQuery queryWithClassName:@"YourClassName"];
attributesQuery.cachePolicy = kPFCachePolicyCacheElseNetwork; //load cache if not then load network
if ([attributesQuery hasCachedResult]){
NSLog(@"hasCached result");
}else{
NSLog(@"noCached result");
}
来源:https://parse.com/questions/hascachedresult-always-returns-no
希望它可以帮助你....!