是否可以使用Airdrop将我的应用程序使用的sqlite数据库(单个文件.sqlite)从一个iPad发送到另一个?如果是这样,我如何到达接收设备上的文件?
如果没有,从应用程序中将文件发送到不同设备上的同一个应用程序的最佳选择是什么?文件将始终是一个sqlite数据库。
答案 0 :(得分: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
您几乎按原样使用该链接,但替换您自己的描述,标识符和扩展名。比你在互联网上看到的一些东西容易得多。需要五分钟。
在发送设备上完成传输后,该文件将作为只读/删除文件驻留在Documents / Inbox目录中。 App Delegate可以实现以下方法:
将文件复制到接收设备上的任何位置。当在接收设备上收到文件时,它将知道启动你的应用程序来处理它,并且会启动DidBecomeActive,允许你根据需要处理它。
另外,您可以使用:
在app委托中发布通知,以便在应用已经处于活动状态时(因此DidBecomeActive不会触发),您的应用可以监听通知以采取相应的操作。
要弄明白这一点已经很长时间了。希望在此发布此摘要将有助于未来的人。
答案 1 :(得分:1)
OP正在寻找的相关解决方案:this Apple's sample code显示如何通过将UTI附加到该数据来在AirDrop上共享自定义类数据。