Пара вариантов здесь.
1) Вы можете использовать ASIHTTPRequest и игнорировать заголовки кэша для кэширования всего. Когда ваше приложение используется, вы можете определить, был ли поврежден кеш. Если он ударил, вы запускаете запрос к серверу после попадания в кеш, чтобы запросить новые данные. Вы можете сделать это, добавив случайный параметр URL в конец URL, так как кеш отключает URL. Если у вас хорошее соединение и новые данные, загрузите его. В противном случае ничего не делайте, и ваш пользователь получит самые последние данные при использовании приложения в хорошем соединении
2) Делайте большую часть # 1, всегда обращаясь к кешу, но вместо того, чтобы запускать некэшируемую версию того же самого запроса к серверу после попадания в кеш, отключите проверку не кешируемой отметки времени, чтобы увидеть, обновлялись ли данные , Если это так, отключите не кэшируемый полный запрос API. Если этого не произошло или не удалось, вы ничего не можете сделать.