gpt4 book ai didi

ios6 cachedResponseForRequest block sendSynchronousRequest

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

这不会发生在 Xcode 4.4 中,但在 4.5 中,使用 ios6 模拟器或真实设备,如果从 cachedResponseForRequest 中调用,对 sendSynchronousRequest 的调用直到超时才会返回。

同样,使用 sendAsynchronousRequest 和自旋的循环(持续 10 秒,每 0.05 秒检查是否完成),完成循环(10 秒过去),但从未完成请求(如果从 cachedResponseForRequest 中调用)。

在 Xcode 4.4(模拟 ios5)中,这不会发生。有什么想法吗?

最佳答案

只需使用方法“sendAsynchronousRequest”。这是我的解决方案,它非常有效。

[NSURLConnection sendAsynchronousRequest:newRequest queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data,NSError *error){
NSLog(@"--- caching ---");
if (error) {
NSLog(@"%@", error);
NSLog(@"not cached: %@", absoluteString);
}
NSString *filename = [self sha1:absoluteString];
NSString *path = [cacheDirectory stringByAppendingPathComponent:filename];
NSFileManager *fileManager = [[NSFileManager alloc] init];
[fileManager createFileAtPath:path contents:data attributes:nil];
[fileManager release];

NSURLResponse *newResponse = [[NSURLResponse alloc] initWithURL:response.URL MIMEType:response.MIMEType expectedContentLength:data.length textEncodingName:nil];

NSDictionary *responseInfo = [NSDictionary dictionaryWithObjectsAndKeys:filename, @"filename", newResponse.MIMEType, @"MIMEType", nil];
[responsesInfo setObject:responseInfo forKey:absoluteString];
cachedResponse = [[NSCachedURLResponse alloc] initWithResponse:newResponse data:data];
[newResponse release];
[cachedResponses setObject:cachedResponse forKey:absoluteString];
[cachedResponse release];
}];

因为它只适用于iOS5.0及以后的版本。您可能需要先检查 ios 版本。

关于ios6 cachedResponseForRequest block sendSynchronousRequest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12920165/

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