3

私のアプリはメッセージング スタイルのアプリで、別のユーザーに「タグ付け」できます。(ちょっとツイッターみたい)。

現在、このメッセージが表示されると、タグ付けされた人物に属するアバターがそのメッセージとともに表示されます。

ユーザーのアバターは、PFUser オブジェクトに対する PFFile として格納されます。

私はそれをこのようなものにロードしています...

PFImageView *parseImageView = ...

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

これはすべてうまくいきます。

コードの必要に応じてロードする部分は、ほとんどの場合、ユーザー データがキャッシュされているため、ネットワークにアクセスしません。

ただし、画像を取得して画像ビューに配置するバックグラウンド部分の読み込みは毎回実行されます。PFFile データのキャッシュはまったくないようです。

同じユーザーのアバターを何度もダウンロードした後でも、ネットワークにアクセスして取得します。

このデータをキャッシュする方法はありますか、それとも自分で実装する必要がありますか?

4

3 に答える 3

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
        }
    }];
}

それが役に立てば幸い :)

于 2015-04-12T02:47:17.297 に答える
-1

以下のコードのように PFQuery の結果をキャッシュできます。また、画像を取得する際に、毎回バックグラウンドでオブジェクトを見つけずにキャッシュをチェックする必要があります。他のキャッシュ ポリシーもあります。添付の​​リンクも確認してください。

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

お役に立てば幸いです....!

于 2014-06-17T14:53:29.123 に答える