Как - где сделать резервную копию базы данных приложения, как восстановить ее на iPhone - PullRequest
2 голосов
/ 12 августа 2011

Что вы делаете для резервного копирования базы данных приложения?

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

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

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

Что вы все делаете для резервного копирования БД из своих приложений?

1 Ответ

1 голос
/ 12 августа 2011

Если вы хотите сохранить документ из электронного письма, вы можете сделать следующее:

Сначала измените файл Info.plist, чтобы зарегистрировать его для обработки определенного расширения вашего файла резервной копии, добавив его в новый файл.ключ называется CFBundleDocumentTypes.

<key>CFBundleDocumentTypes</key>
<array>
    <dict>
        <key>CFBundleTypeName</key>
        <string>MyApplication</string>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>LSHandlerRank</key>
        <string>Owner</string>
        <key>LSItemContentTypes</key>
        <array>
            <string>com.myapplication.myapplicationsuffix.fileextension</string>
        </array>
    </dict>
</array>

Следующее, что нужно настроить, - это типы URL комплекта вашего приложения.

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLName</key>
        <string>com.myapplication.myapplicationsuffix.myoperationkey</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>packageforlaunch</string>
        </array>
    </dict>
</array>

Таким образом, когда пользователь запускает файл (нажимает на него в сообщении электронной почты), он будетзапустите ваше приложение и предоставьте ему URI файловой системы.В вашем делегате приложения вы можете реализовать приложение - (BOOL): (UIApplication *) application handleOpenURL: (NSURL *) url-метод.

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
     if(url != nil && [url isFileURL])
    {
        NSData *d = [NSData dataWithContentsOfURL:url];
        [[NSFileManager defaultManager] createFileAtPath:[[self applicationDocumentsDirectory] stringByAppendingPathComponent:[url lastPathComponent]] contents:d attributes:nil];
}

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

ЧтоЯ сделал, чтобы использовать хранилище данных SQLite для CoreData, или использовать сам SQLite.На короткое время заблокируйте файл, создайте копию файла базы данных и загрузите его через PUT / POST на мой сервер через API.Затем сервер сохраняет файл в CouchDB с отметкой времени.Это приводит к тому, что система управления версиями для бедного человека всегда может быть откатана, поскольку база данных помечена либо идентификатором пользователя, либо UDID пользователя, либо обеими отметками времени.

Более простой метод, вероятно, будетиспользовать комбинацию нового хранилища документов Apple для базы данных и хранилища ключей / значений с указателем на идентификатор документа, который представляет резервную копию.

К сожалению, я не думаю, что существует простой механизмдля этого механизм электронной почты, который вы описываете, является, вероятно, самым простым, но с CoreData он делает даже это сложным.Если вы используете сырой SQLite3 и библиотеку FMDB, это значительно упрощает процесс.

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