Как удалить данные перед обновлением

#iphone #objective-c #ios

#iPhone #objective-c #iOS

Вопрос:

У меня есть более новая версия приложения для обновления в app Store, но поскольку там были некоторые устаревшие данные: например, база данных и некоторые файлы, которые мне не нужны в более новой сборке, или некоторые базы данных, которые используют то же имя, что и более новая сборка, но структура БД отличается, так есть ли способ удалить вселичные данные последней версии, когда пользователь выполняет обновление? Затем, после того, как пользователь обновил мое приложение, приложение выглядит как совершенно новое.

Ответ №1:

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

Здесь следует учитывать две вещи:

  1. Если вы знаете, где находится база данных / файлы, вы можете использовать NSFileManager методы для их явного удаления. Особенно removeItemAtPath:error: . Ссылка на класс весьма полезна.
  2. При очистке состояния всего приложения следует соблюдать осторожность. Знают ли ваши пользователи, что это произойдет? Они потеряют конфиденциальные данные?

Комментарии:

1. о боже, это невероятно быстро!!! Спасибо, приятель! Но как я могу управлять действием удаления, выполняемым только один раз при первом запуске приложения?

Ответ №2:

Существует шаблон, которому вы можете следовать.

Допустим, ваша база данных называется MySqliteDatabase.sqlite. В каталоге Documents есть некоторые другие данные, но вы не хотите их использовать и удалите их при первой установке следующей версии.

В новой версии переименуйте базу данных в MySqliteDatabasev2.sqlite. При запуске приложения используйте NSFileManager для поиска MySqliteDatabasev2.sqlite в каталоге documents. Если он не существует, удалите каталог documents и скопируйте туда мой SqliteDatabasev2.sqlite.

Для любых последующих запусков приведенная выше логика найдет данные версии 2 и ничего не сделает с каталогом documents.

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

Будьте осторожны: обязательно измените остальную часть кода, чтобы использовать новое имя. Для этого лучше всего определить его в каком-нибудь заголовочном файле commons (у меня есть commons.h в каждом проекте)

 #define DB_NAME @"MySqliteDbv2.sqlite"
 

а затем убедитесь, что везде вы используете только DB_NAME и ничего больше. Поэтому всякий раз, когда версия меняется:
1. переименуйте файл БД в xcode navigator.
2. переименуйте определение DB_NAME.

Вот и все.

Ответ №3:

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

 NSString *path = <path to your file> 
[[NSFileManager defaultManager] removeItemAtPath:[self persistentStorePath] error:nil];
 

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

 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *path = [[[paths lastObject] stringByAppendingPathComponent:@"subdirectoryIfAny"] 
                      stringByAppendingPathComponent:@"name of your .sql or whatever"];
 

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

Комментарии:

1. о боже, это невероятно быстро!!! Спасибо, приятель! Но как я могу управлять действием удаления, выполняемым только один раз при первом запуске приложения?

2. установите ключ NSUserDefaults, например, alreadyDeletedOldData, затем проверьте его. Если НЕ установлено, выполните удаление и установите флаг. Если он УСТАНОВЛЕН, не выполняйте удаление.