Функция восстановления на основе доступа к диску iOS

Я пытаюсь закодировать функцию восстановления на основе жесткого диска в существующее демонстрационное фото-приложение для устройств iOS. Идея состоит в том, чтобы позволить пользователям восстанавливать последние примененные эффекты и все, даже после перезапуска приложения/неожиданного сбоя и т. д.

Я сохраняю один файл изображения (последние примененные к нему эффекты) в NSCachesDirectory:

     NSData* data = UIImagePNGRepresentation(image);
    [data writeToFile:[self getFileAtIndex:getPath] atomically:YES];

При переходе к опции восстановления файл, сохраненный по этому пути, восстанавливается с помощью:

    image = [[UIImage imageWithContentsOfFile:[self getFileAtIndex:getPath]]retain];

Код отлично работает на моем тестовом устройстве (iPhone 4s). Но почему-то я сомневаюсь, что это лучшая практика для кодирования функции восстановления.

Переходя к реальному приложению, если что-то хранилось в NSCachesDirectory, как вы думаете, будет ли резервное копирование в iCloud? Есть ли вероятность конфликта с другими приложениями?

Как именно управляется каталог NSCachesDirectory для одновременного доступа к нему нескольких приложений?

Я хотел бы знать лучшую практику для этого.

Пожалуйста, помогите / прокомментируйте.


person metsburg    schedule 25.03.2013    source источник
comment
NSCachesDirectory не резервируется в облако. Только файлы в NSDocumentDirectoty. Нет возможных конфликтов, так как все приложения имеют свои собственные NSCachesDirectory / NSDocumentDirectoty и т. д.   -  person Mr Bonjour    schedule 25.03.2013


Ответы (1)


Как упомянул г-н Бонжур в комментарии, в iOS каждое приложение имеет свою отдельную файловую систему, поэтому конфликтов с другими приложениями быть не может.

Каталог Caches не резервируется в iCloud, и вы не должны полагаться на то, что файлы в каталоге caches будут сохраняться при запуске. Вы должны использовать каталог caches только для временных файлов. Если вы разрешаете восстановление только во время одного сеанса, то использование каталога caches нормально, но если вы хотите разрешить восстановление при нескольких запусках, вы должны хранить их в каталоге library/documents. Но имейте в виду, что у Apple есть строгая политика проверки для хранения файлов в каталоге «Документы», поскольку он занимает место в облачном хранилище пользователя.

person maroux    schedule 25.03.2013
comment
Но если я использую NSDocumentDirectory, файл резервной копии окажется в iCloud - нежелательно. Не уверен насчет политики в отношении NSLibraryDirectory. Будет читать об этом. - person metsburg; 25.03.2013
comment
Если вы хотите резервную копию: используйте документы. Если вы хотите, чтобы файл был доступен при запуске: используйте библиотеку. Если вы хотите, чтобы файл был доступен только в этом сеансе: используйте Кэши. - person maroux; 25.03.2013
comment
Хорошо понял. Еще один вопрос... если я использую кэши и не могу удалить свои временные файлы, будут ли они автоматически очищаться при ограничении памяти? Или я несу ответственность за управление этим, и несоблюдение требований приведет к отказу от Apple? - person metsburg; 25.03.2013
comment
Учитывая характер каталога caches, я думаю, можно с уверенностью предположить, что вы можете оставить его в покое, и iOS очистит его по мере необходимости, но лично у меня нет опыта того, что об этом думают рецензенты Apple. - person maroux; 25.03.2013
comment
Хорошо я понял. Я добавлю это в свое приложение и посмотрю... большое спасибо за помощь. - person metsburg; 25.03.2013