【发布时间】:2014-09-15 06:46:51
【问题描述】:
是否可以使用 Airdrop 将我的应用程序使用的 sqlite 数据库(单个文件 .sqlite)从一台 iPad 发送/接收到另一台 iPad?如果是这样,我如何获取接收设备上的文件?
如果不是,从一个应用程序中将文件发送到不同设备上的同一个应用程序的最佳选择是什么?文件将始终是一个 sqlite 数据库。
【问题讨论】:
是否可以使用 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 正在寻找的相关解决方案:this Apple's sample code 展示了如何通过将 UTI 附加到该数据来通过 AirDrop 共享自定义类数据。
【讨论】: