gpt4 book ai didi

ios - HEADER 请求 allHeaderFields 不工作

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:06:05 24 4
gpt4 key购买 nike

我的代码的目的是比较服务器文件和本地文件的修改日期,如果服务器文件较新,它将下载它。

我的第一次尝试是使用 http://iphoneincubator.com/blog/server-communication/how-to-download-a-file-only-if-it-has-been-updated 中的代码来使用同步请求

但是没有用。之后我一直在努力寻找解决方案,尝试了异步请求,尝试了我在 stackoverflow、google 等周围找到的不同代码,但没有任何效果。

如果在终端我做curl -I <url-to-file>我得到 header 值,所以我知道这不是服务器问题。

这是我现在正在努力处理的代码(它是在 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)返回(空)。

PS:如果有更好的方法可以解释我自己或代码,请告诉我。

更新

我使用的 URL 类型为 ftp://这可能就是为什么我没有得到任何标题的问题。但我不知道该怎么做。

最佳答案

将您的代码更改为...在“if”条件中,您正在检查 response 而不是 httpResponse:

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
NSString *lastModifiedString = nil;
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)response;
if ([httpResponse respondsToSelector:@selector(allHeaderFields)]) {
lastModifiedString = [[httpResponse allHeaderFields] objectForKey:@"Last-Modified"];
}
// [Here is where the formatting-date-code and downloading would take place]
}

...一旦您对响应始终是 NSHTTPURLResponse 感到满意,您就可以去掉条件语句:

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)response;
NSString *lastModifiedString = [[httpResponse allHeaderFields] objectForKey:@"Last-Modified"];
// [Here is where the formatting-date-code and downloading would take place]
}

关于ios - HEADER 请求 allHeaderFields 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13503551/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com