2014-09-14 2 views
0

Итак, мое приложение iOS просто отклонено, поскольку оно хранит слишком много данных, не созданных пользователем, в базе данных SQLite, которая находится в папке «Документы».Приложение iOS: Недостаточная заполненная база данных не допускается - альтернативы?

Приложение в основном включает в себя относительно большую библиотеку изображений - около 60 или около того мегабайт из них для запуска, а также есть покупки в приложениях, каждая из которых добавляет дополнительные 60 или около того изображений. Кроме того, пользователь может добавить свои собственные изображения в библиотеку.

Теперь все (изображения и все) хранится в базе данных SQLite, которая создается при первом запуске приложения. Когда пользователь добавляет больше изображений или приобретает пакеты изображений, эти изображения добавляются в базу данных. Пользователю все изображения (созданные пользователем или нет) ведут себя одинаково в приложении.

Но Apple не допустит этого: я не могу иметь все эти данные, хранящиеся в базе данных SQLite, в папке «Документы», если я не настроил его специально НЕ для резервного копирования в iCloud, так как это все восстановимые данные.

Но если я настрою его на резервное копирование, то созданные пользователем данные также не будут поддерживаться, что я определенно не хочу.

Любые предложения о том, как я могу «разбить» базу данных, чтобы все созданные пользователем файлы можно было скопировать, но включенные или приобретенные вещи не являются?

ответ

4

Причина, по которой вы отклоняется, не соответствует Data Storage Guidelines. Данные, созданные или отредактированные пользователем, входят в состав NSDocumentsDirectory, тогда как данные приложения должны храниться в другом месте (то есть в каталоге поддержки приложений). Эти требования являются результатом использования iCloud для резервного копирования и очистки дискового пространства в iOS.

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

Существует более подробная информация о том, как это реализовать в this answer.

Альтернатива для вашего конкретного случая был бы сохранить изображений в файловой системе, в каталоге кэши или в других местах. Пользовательские изображения могут существовать в NSDocumentsDirectory, тогда как изображения приложений могут существовать в NSCachesDirectory. Это приведет к удалению изображений из Core Data, и вместо этого ваши объекты модели будут иметь путь к изображению в файловой системе. Это было бы кратковременным исправлением, чтобы получить вас через подчинение и, вероятно, сработает.

+0

«Краткосрочное исправление» на самом деле похоже на довольно солидное решение в моем случае, поскольку данные без изображения минимальны и не должны беспокоить рецензентов приложений. Благодаря! – DanM

+0

Для чего это стоит, я спросил группу обзора, было ли это решение приемлемым, и они дали мне квалифицированный «Да». Теперь, когда я его реализовал, это гораздо более элегантное решение, чем на бумаге. – DanM

0

Один из вариантов - сохранение ваших данных на сервере, а вызов - с помощью веб-службы. Во время первого запуска. Или согласно требованию.

+0

Определенно хочу избежать необходимости стоять на этом сервере для этого - также, в то время как это может не нарушить букву закона, это, безусловно, сломает дух (заставляя не созданный пользователем день быть скопированным до iCloud) – DanM

Смежные вопросы