Ответ 1
Хорошая статья здесь о проблеме:
http://andrewmarinov.com/ioss-corenetwork-lying/
В принципе, из NSHTTPURLResponse код состояния всегда 200
Итак, если вам действительно нужно знать, вы можете проверить, что элемент находится в кеше, прежде чем вы выполните запрос
NSCachedURLResponse *cachedResponse = [[NSURLCache sharedURLCache] cachedResponseForRequest:request];
NSHTTPURLResponse *httpCacheResponse = (NSHTTPURLResponse *)cachedResponse.response;
Если это так, сохраните измененный заголовок 'etag' или 'modified-date'
NSString* etag = httpCacheResponse.allHeaderFields[@"etag"];
Затем в обработчике ответов проверка etag или дата изменения одинаковы. Если это так, ответ был получен из кеша!