2014-09-15 2 views
1

Возможно ли использовать Airdrop для отправки/получения базы данных sqlite (один файл .sqlite), используемой моим приложением с одного iPad на другой? Если да, то как мне добраться до файла на принимающем устройстве?Могу ли я отправить/получить базу данных sqlite от Airdrop

Если нет, что является лучшим вариантом из приложения, чтобы отправить файл в одно и то же приложение на другом устройстве? Файлы всегда будут базами данных sqlite.

ответ

5

В случае, если кто-то наткнулся на это, ответ ДА, вы можете это сделать. Я опишу подход, который я принял.

Во-первых, я использовал отдельный стек Core Data для создания файла sqlite для экспорта (в моем случае с некоторой фильтрацией и т. Д.), А затем переименовал sqlite на отправляющем устройстве, чтобы иметь расширение, уникальное для нашего приложение. Затем, следующий код используется для инициирования перевода:

NSURL *url = [coreDataExporter urlToShare]; 
UIActivityViewController *controller = [[UIActivityViewController alloc] initWithActivityItems:[NSArray arrayWithObject:url] applicationActivities:nil]; 

// Exclude all activities except AirDrop. 
NSArray *excludedActivities = @[UIActivityTypePostToTwitter, UIActivityTypePostToFacebook, 
           UIActivityTypePostToWeibo, 
           UIActivityTypeMessage, UIActivityTypeMail, 
           UIActivityTypePrint, UIActivityTypeCopyToPasteboard, 
           UIActivityTypeAssignToContact, UIActivityTypeSaveToCameraRoll, 
           UIActivityTypeAddToReadingList, UIActivityTypePostToFlickr, 
           UIActivityTypePostToVimeo, UIActivityTypePostToTencentWeibo]; 
controller.excludedActivityTypes = excludedActivities; 

// Present the controller 
[self presentViewController:controller animated:YES completion:nil]; 

Используйте эту ссылку, чтобы создать свое уникальное расширение, так он распознается как файл, принадлежащего к вашему приложению:

https://developer.apple.com/library/ios/qa/qa1587/_index.html

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

Как только передача завершена на отправляющем устройстве, файл будет находиться в папке «Документы/Входящие» в качестве файла только для чтения и удаления. App Делегат может реализовать следующий метод:

  • (Недействительными) applicationDidBecomeActive: заявление (UIApplication *)

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

Кроме того, вы можете использовать:

  • (BOOL) применение: (UIApplication *) применение OpenUrl: (NSURL *) URL sourceApplication: (NSString *) sourceApplication аннотация: (идентификатор) аннотацию

в делегате приложения, чтобы отправить уведомление, чтобы, если приложение уже активно (при этом DidBecomeActive не срабатывает), ваше приложение может прослушать уведомление, чтобы предпринять соответствующие действия.

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

1

Связанное решение, которое ищет OP: this Apple's sample code показывает, как обмениваться данными пользовательского класса над AirDrop, подключая UTI к этим данным.

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