17

Tôi đặt NSURLCache trên một thư mục cụ thể (../../Ứng dụng ứng dụng/Ngoại tuyến để nó không bị hệ điều hành xóa một cách ngẫu nhiên), sau đó tôi gửi NSURLRequest với chính sách NSURLRequestReturnCacheDataElseLoad.Làm cách nào để biết liệu NSURLResponse có đến từ bộ nhớ cache không?

Làm cách nào để biết phản hồi, được xử lý bởi lớp phù hợp với NSURLConnectionDelegate, đến từ bộ nhớ cache hoặc từ mạng?

Trả lời

6

Tốt bài viết ở đây về vấn đề này:

http://andrewmarinov.com/ioss-corenetwork-lying/

Về cơ bản, từ NSHTTPURLResponse mã trạng thái luôn luôn là 200

Vì vậy, nếu bạn thực sự cần phải biết, bạn có thể kiểm tra các mục trong bộ nhớ cache trước khi bạn thực hiện các yêu cầu

NSCachedURLResponse *cachedResponse = [[NSURLCache sharedURLCache] cachedResponseForRequest:request]; 
NSHTTPURLResponse *httpCacheResponse = (NSHTTPURLResponse *)cachedResponse.response; 

Nếu vậy lưu 'etag' sửa đổi hoặc 'sửa đổi cập nhật' đầu

NSString* etag = httpCacheResponse.allHeaderFields[@"etag"]; 

Sau đó, trong trình xử lý phản hồi, kiểm tra etag hoặc ngày sửa đổi là giống nhau. Nếu vậy, câu trả lời là từ bộ nhớ cache!

+0

đó là cơ bản những gì tôi đã kết thúc làm – greg3z

+2

bạn luôn có thể trả lời câu hỏi của riêng bạn! Đã có thể tiết kiệm cho tôi một giờ của cuộc sống của tôi ;-) –

Các vấn đề liên quan