从Parse缓存PFFile数据

时间:2014-06-17 13:42:22

标签: ios objective-c parse-platform pffile

我的应用是一种消息传递风格的应用,您可以在其中标记"标记"另一个用户。 (有点像推特)。

现在,当显示此消息时,属于被标记的人的头像将显示该消息。

用户的头像存储为PFUser对象的PFFile。

我正在装载类似的东西......

PFImageView *parseImageView = ...

[taggedUser fetchIfNeededInBackgroundWithBlock:^(PFObject *user, NSError *error) {
    parseImageView.file = user[@"avatar"];
    [parseImageView loadInBackground];
}];

一切正常。

如果需要,部分代码的负载大部分时间都不会触及网络,因为大多数时候它都会缓存用户数据。

但是,获取图像并将其放入图像视图的背景部分中的负载每次都会运行。根本没有对PFFile数据进行任何缓存。

即使在多次下载同一个用户的头像之后,它仍然会通过网络获取它。

有没有办法让这些数据缓存,或者这是我必须自己实现的?

3 个答案:

答案 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

希望它可以帮助你....!