потеря данных приложения при обновлении версии - PullRequest
9 голосов
/ 10 декабря 2011

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

У меня есть приложение для iphone, которое содержит базу данных sqlite в своей папке ресурсов. Теперь, когда я обновляю его до более поздней версии из iTunes, все данные в базе данных теряются.

Предположим, пользователь ввел 1000 записей в базе данных. Поэтому, если он потеряет свои данные в случае обновления приложения из iTunes, ему определенно не понравится обновлять версию своего приложения. Затем он должен быть сначала уведомлен о том, что «вы потеряете все свои предыдущие данные» или что в новой версии предыдущие данные должны остаться без изменений.

Какой процедуре я должен следовать в новой версии, чтобы сохранить все старые данные в новой версии ...?

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

Это экстренная проблема. Пользователи обновляют приложение и теряют ранее сохраненные данные в базе данных. Даже они не получают уведомления, что они потеряют все данные. !

Ответы [ 4 ]

5 голосов
/ 20 декабря 2011

Если основные данные не используются, единственный способ сохранить пользовательские данные - сохранить базу данных в каталоге пользователя Documents , а также в каталоге Library .

Documents

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"UserData.sqlite"]];

Library

[NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) objectAtIndex:0];

Это также единственные каталоги, доступные для записи для вашего приложения.Если вы включили «пустую» базу данных в папку Resources , она будет скопирована в пакет.Оттуда вам нужно проверить, существует ли БД в каталоге Documents , если нет, то скопируйте его из комплекта.

Это единственный способ обеспечить защиту данных при обновлении приложений.

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

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

0 голосов
/ 29 июля 2013

Если вы хотите установить номер версии для вашей базы данных, чтобы ваш iphone мог легко обрабатываться, сохраните номер вашей версии в вашей базе данных и, когда база данных вызывается, сравнивает версию сожидаемая версия

Если new version > older version изменить схему (это необходимо, если бы вы изменили схему вашей базы данных) с помощью операторов SQL ALTER и обновить номер версии приложения.

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

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

0 голосов
/ 03 октября 2012

Вы можете использовать отдельный файл sqlite db для пользовательских данных, которые вы не должны потерять.

PS: при загрузке нового обновления из App Store.iOS перемещает старые файлы в другую папку.После завершения загрузки и установки iOS перенесите старые файлы в папку приложения.

0 голосов
/ 20 декабря 2011

Где вы храните свои данные?Вы должны сделать это в каталоге Documents вашего пакета приложений.Каталоги, отличные от Documents и Library, не сохраняются при обновлении приложения (во время обновления ваше приложение фактически устанавливается в другой каталог, и его данные копируются обратно).

Вот хороший обзор файловой системы iOS: Стандартные каталоги iOS: где находятся файлы (Руководство по программированию файловой системы)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...