0

アプリ内にバージョン チェッカーがあり、現在のバージョン番号がサーバーの plist に保存されています。1.2と言い続けているのになぜか1.21だと確認したら古い値を返し続けてしまう。私のブラウザも同じことをするので、それはある種のキャッシングだと思います。

これを防ぐにはどうすればよいですか?cachePolicy を に設定しましたがNSURLRequestReloadIgnoringCacheData、1.21 の場合でも 1.2 が返されます

NSURL *url = [NSURL URLWithString:@"https://somewebsite.com/iosapp/CurrentVersion.plist"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
request.cachePolicy = NSURLRequestReloadIgnoringCacheData;

[request setHTTPMethod:@"GET"];

[AFPropertyListRequestOperation addAcceptableContentTypes:[NSSet setWithObject:@"text/xml"]];
AFPropertyListRequestOperation *operation = [AFPropertyListRequestOperation propertyListRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id propertyList) {
    NSString *currentVersion = [[[NSArray alloc] initWithArray:propertyList] objectAtIndex:0];
    NSLog(@"Current Version %@", currentVersion);
    NSString *deviceVersion = [[NSBundle mainBundle] objectForInfoDictionaryKey: @"CFBundleShortVersionString"];
    if (![currentVersion isEqualToString:deviceVersion]) {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Update Available" message:[NSString stringWithFormat:@"App %@ is available. Please update.", currentVersion] delegate:self cancelButtonTitle:@"Later" otherButtonTitles:@"Update", nil];
        [alert show];
    }


    [self finalCheck];
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id propertyList) {
    [self finalCheck];
}];
4

1 に答える 1

1

AFPropertyListRequestOperationの実装は、キャッシュに関連することは何もしません。以下にいくつかのオプションを示します。

  1. プロキシまたは仲介者がキャッシュしている可能性があります。NSURLRequestReloadIgnoringLocalAndRemoteCacheData代わりに試してください。
  2. への応答[[NSBundle mainBundle] objectForInfoDictionaryKey: @"CFBundleShortVersionString"]は、期待しているものではない可能性があります (ログに記録していないことに気付きました)。

また、次の 2 つのライブラリをチェックすることをお勧めします。

  • Harpyは、iTunes API を使用して最新バージョンをチェックし、指定した間隔でユーザーをしつこくする、追加が簡単でメンテナンスの少ないライブラリです。
  • Ground Controlは、リモート plist ファイルを非同期的にダウンロード、読み取り、保存する NSUserDefaults の単純なカテゴリです。

1 つ目は、このコードを記述する必要性を回避します。2 つ目は、もう少し制御やカスタマイズが必要な場合に簡単になります。

于 2013-08-30T00:17:35.327 に答える