3

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

同样,使用 sendAsynchronousRequest 并旋转的循环(每 0.05 秒检查 10 秒是否完成),完成循环(经过 10 秒),但永远不会完成请求(如果从 cachedResponseForRequest 中调用)。

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

4

1 回答 1

0

只需使用“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 版本。

于 2012-11-20T08:36:36.593 回答