Есть несколько способов. Один из них - использовать собственное наложение плиток и реализовать алгоритм кэширования либо в URLForTilePath:, либо в loadTileAtPath: result:
Очень хорошо работает с открытым доменом и некоторыми частными. Не кеширует стандартные Apple Maps.
Другим способом, который сможет кэшировать все, является подкласс NSURLProtocol. Есть несколько уроков, и, вероятно, вы можете определить, когда изображение карты, и действовать соответственно