Если вы хотите сохранить документ из электронного письма, вы можете сделать следующее:
Сначала измените файл 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, это значительно упрощает процесс.