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