私のコードの目的は、サーバー ファイルとローカル ファイルの変更日を比較することです。サーバー ファイルの方が新しい場合は、それをダウンロードします。
私の最初の試みは、 http://iphoneincubator.com/blog/server-communication/how-to-download-a-file-only-if-it-has-been-updatedのコードを使用して同期要求を使用することでした
しかし、うまくいきませんでした。その後、解決策を見つけるのに苦労し、非同期リクエストを試し、stackoverflowやgoogleなどで見つけたさまざまなコードを試しましたが、何も機能しません。
ターミナルでcurl -I <url-to-file>
ヘッダー値を取得すると、サーバーの問題ではないことがわかります。
これは私が今苦労しているコードです(Appdelegate.mに書かれています)
- (void)downloadFileIfUpdated {
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL: url
cachePolicy: NSURLRequestReloadIgnoringLocalCacheData
timeoutInterval: 10];
[request setHTTPMethod:@"HEAD"];
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];
if(!connection) {
NSLog(@"connection failed");
} else {
NSLog(@"connection succeeded");
}
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[self downloadFileIfUpdated]
}
#pragma mark NSURLConnection delegate methods
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
NSString *lastModifiedString = nil;
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)response;
if ([response respondsToSelector:@selector(allHeaderFields)]) {
lastModifiedString = [[response allHeaderFields] objectForKey:@"Last-Modified"];
}
[Here is where the formatting-date-code and downloading would take place]
}
今のところ、それは私にエラーを与えますNo visible @interface for 'NSURLResponse' declares de selector 'allHeaderFields'
。
同期アプローチを使用すると、エラーはNSLog(@"%@",lastModifiedString)
(null) を返します。
PS: 自分自身またはコードを説明できるより良い方法がある場合は、お知らせください。
アップデート
私が使用している URL はタイプのものftp://
であり、それが HEADERS を取得できない理由の問題である可能性があります。しかし、私はそれを行う方法を理解できません。