Подтвердить что ты не робот

IOS 5 не позволяет сохранять загруженные данные в папке "Документы"?

Я сделал заявку для своего клиента, сохраняя целевой iOS как 4.
Но поскольку приложение все еще не отправлено в Apple Store, мой клиент планирует обновить его для iOS 5.0.

Для этого я прочитал руководство от Apple и обнаружил, что "только пользовательские данные или которые в противном случае не могут быть воссозданы вашим приложением, должны храниться в каталоге /Documents, а отдых должен храниться в каталоге /Library/Caches "

В моем приложении я использую серверную модель покупки в приложении для не потребляемого продукта. Для этого я сохраняю все загруженные вами данные (в основном книги или журналы) в папку "Документы". База данных также присутствует в том же каталоге, который содержит сведения о загруженных продуктах.

Мой вопрос,
1. Должен ли я изменить свой код для хранения загруженных данных в каталог Library/Caches, а не в каталог Documents?
2. Где должен быть размещен мой файл базы данных (в Документы или Кэши)?

Если я поместил его в кэши, тогда мне также придется изменить логику извлечения, так как считается, что если запись присутствует в базе данных, нет необходимости в изменении существования файла, и он сразу открывается, когда пользователь нажимает на журнал.

Просьба помочь мне в этом вопросе.
Спасибо заранее.

ОБНОВЛЕНО:
Я обновляю это для тех, кто до сих пор не уверен в этой проблеме.
Используя рекомендацию принятого ответа, я реализовал это в двух моих приложениях и отправил их в Apple Store. Оба были одобрены в обзоре.
Это может способствовать тому, что решение, предложенное в принятом ответе, является правильным.

4b9b3361

Ответ 1

Вот компромиссы:

  • Если вы поместите свои файлы в каталог "Документы", они будут скопированы в iTunes или iCloud, но если они слишком большие, и вы можете снова загрузить файлы, Apple может отклонить ваше приложение.
  • Если вы поместите свои файлы в каталог Cache, они не будут скопированы, и Apple не отклонит ваше приложение. Однако, когда iOS 5 становится мало в пространстве, он может удалить все файлы там.

Однако с iOS 5.0.1 есть третий вариант:

  • Поместите файлы в документы, но отметьте их так, чтобы они не были скопированы. Там, где это делается, технот (QA1719).

Я думаю, что это, вероятно, лучший ответ для вас.

Ответ 2

1. Должен ли я изменить свой код для хранения загруженных данных в каталог Library/Caches, а не в папку Documents?= Да, вам нужно сохранить загруженные данные в каталог Library/Caches.

2. Где должен быть размещен мой файл базы данных (в Документы или Кэши)?= Вы можете сохранить базу данных в папке "Документы".

Ответ 3

Одна из приложений, которую я знаю, была однажды отвергнута из-за этого. Хранение загружаемых данных в Document dir не рекомендуется. Логика этого заключается в том, что ваши данные не должны излишне раздувать каталог приложения. Этот каталог приложений резервную копию в iCloud, поэтому надутый каталог приложения приведет к тому, что в iCloud будет сохранено больше данных.

Если данные можно загрузить снова, например журналы, книги pdf и т.д. Затем сохраните их в каталоге Caches. Конечно, вы можете хранить указатели на данные (например, URL-адреса и т.д.) В каталоге "Документы", чтобы пользователь мог их позднее загрузить.

Чтобы ответить на ваши вопросы:

  • Да, измените свой код, чтобы загрузить БД из документов и данных из кешей.
  • Хранить базу данных в документах

Вам нужно будет добавить код, чтобы проверить, существует ли документ в базе данных в кэшах, если его приложение не загружает его снова.

Ответ 4

В дополнение к предположению о том, что вы должны хранить данные в каталоге кеша, существует опасение, что вы должны иметь в виду, сохраняя данные в папке с кешем:

Всякий раз, когда iOS чувствует хруст памяти, он удаляет всю папку кэша и временную папку. Проблема подробно описана здесь Чтобы защитить этот каталог, чтобы не удалять и не хранить все на всю жизнь, вы должны использовать атрибут, который сохранит указанный каталог в безопасности. Решение здесь:

Ответ 5

Я искал один и тот же запрос, и у меня есть решение. Согласно документации хранения данных Apple, разработчик может хранить данные в кеше, даже если пользователь хочет сохранить эти данные в ситуации с низкой памятью .develper просто нужно установить флаг Do not back up.

Use the "do not back up" attribute for specifying files that should remain on device, 
even in low storage situations. Use this attribute with data that can be recreated but
needs to persist even in low storage situations for proper functioning of your app or 
because customers expect it to be available during offline use. 

This attribute works on marked files regardless of what directory they are in, including      the Documents directory. 
These files will not be purged and will not be included in the user iCloud 
or iTunes backup. Because these files do use on-device storage space, your app is 
responsible for monitoring and purging these files periodically.

Для получения дополнительной информации перейдите по этой ссылке

Использовать ниже фрагмент кода для установки флага Do not back up.

import <sys/xattr.h>

- (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL
{
if (&NSURLIsExcludedFromBackupKey == nil) { // iOS <= 5.0.1
    const char* filePath = [[URL path] fileSystemRepresentation];

    const char* attrName = "com.apple.MobileBackup";
    u_int8_t attrValue = 1;

    int result = setxattr(filePath, attrName, &attrValue, sizeof(attrValue), 0, 0);
    return result == 0;
} else { // iOS >= 5.1
    NSError *error = nil;
    [URL setResourceValue:[NSNumber numberWithBool:YES] forKey:NSURLIsExcludedFromBackupKey error:&error];
    return error == nil;
}

}

URL is the path of Data.

Ответ 6

Я сделал заявку для своего клиента, поставив целевой iOS на 4. Но поскольку приложение все еще не отправлено в магазин Apple, клиент планирует обновить его для iOS 5.0

Другой вариант (если вы только собираетесь поддерживать iOS 5) - использовать NewsstandKit. Таким образом, только избранные выпуски журнала будут удалены iOS при низком уровне на диске. Мое понимание заключается в том, что iOS удалит выбранные проблемы на основе последнего прочитанного и, возможно, размера.

Если вы не используете газетный киоск и целевое приложение, все проблемы будут удалены.