1) пока приложение живет, то есть как процесс запущено пользователем - нужно использовать NSCache, но делать бэкап на диск, чтобы в этот час пользователь мог выйти-зайти обратно и не потерять свой кэш.
2) обработка сети: есть интернет, но нет кеша -> иди к АПИ. Есть интернет и кеш - бери кэш. Нет интернета, но есть кэш -> бери кэш, нет интернета и Кеша -> покажи пользователю в UI что все плохо