以下のメソッドはHEAD
、フィールドを持つヘッダーのみをフェッチしLast-Modified
てオブジェクトに変換するリクエストを実行しNSDate
ます。
- (NSDate *)lastModificationDateOfFileAtURL:(NSURL *)url
{
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
// Set the HTTP method to HEAD to only get the header.
request.HTTPMethod = @"HEAD";
NSHTTPURLResponse *response = nil;
NSError *error = nil;
[NSURLConnection sendSynchronousRequest:request
returningResponse:&response
error:&error];
if (error)
{
NSLog(@"Error: %@", error.localizedDescription);
return nil;
}
else if([response respondsToSelector:@selector(allHeaderFields)])
{
NSDictionary *headerFields = [response allHeaderFields];
NSString *lastModification = [headerFields objectForKey:@"Last-Modified"];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss zzz"];
return [formatter dateFromString:lastModification];
}
return nil;
}
このメソッドをバックグラウンドで非同期的に実行して、メインスレッドが応答を待ってブロックされないようにする必要があります。これは、の数行を使用して簡単に実行できますGCD
。
以下のコードは、バックグラウンドスレッドで最終変更日をフェッチするための呼び出しを実行し、日付が取得されたときにメインスレッドで完了ブロックを呼び出します。
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^
{
// Perform a call on the background thread.
NSURL *url = [NSURL URLWithString:@"yourFileURL"];
NSDate *lastModifDate = [self lastModificationDateOfFileAtURL:url];
dispatch_async(dispatch_get_main_queue(), ^
{
// Do stuff with lastModifDate on the main thread.
});
});
私はこれについてここに記事を書きました:
Objective-Cを使用してサーバー上のファイルの最終変更日を取得します。