通过UIActivityViewController发送自定义数据

我试图从一个iOS设备上的应用程序发送数据(NSData)到另一个通过AirDrop使用UIActivityViewController。 我在我的应用程序plist中创build了一个新的CSM(自定义数据types)。 public.filename-extension = ppm。 那么如何将ppm扩展添加到我试图发送的NSDate对象? 我正确的想,当你提出一个UIActivityViewController,我的应用程序图标将不会显示在UIActivityViewController窗口中,如果对象我发送没有我的应用程序公共扩展(ppm)?? ….是的,我是真的很困惑! 下面是我用来展示UIActivityViewController的代码

@IBAction func shareButton(sender: AnyObject) { // myData is the object I want to send to be used in my app on another device let vc = UIActivityViewController(activityItems: [myData],applicationActivities: []) presentViewController(vc, animated: true, completion: nil) } 

基本上,我想要做的就是发送自定义数据在我的应用程序中使用

您应该查看一下AirDrop示例代码 ,该代码涵盖了定义您自己的文件types以及与其他设备上的应用程序共享的情况。 如果要共享原始数据,关键部分是您必须创build一个UIActivityItemSource的实例并将其传递给UIActivityViewController 。 像这样的东西:

 class DataActivityItemSource: NSObject, UIActivityItemSource { let myData: NSData let typeIdentifier: String let subject: String let previewImage: UIImage init(myData: NSData, typeIdentifier: String, subject: String, previewImage: UIImage) { self.myData = myData self.typeIdentifier = typeIdentifier self.subject = subject self.previewImage = previewImage } // called to determine data type. only the class of the return type is consulted. it should match what -itemForActivityType: returns later @objc func activityViewControllerPlaceholderItem(activityViewController: UIActivityViewController) -> AnyObject { return myData } // called to fetch data after an activity is selected. you can return nil. @objc func activityViewController(activityViewController: UIActivityViewController, itemForActivityType activityType: String) -> AnyObject? { return myData } // if activity supports a Subject field. iOS 7.0 @objc func activityViewController(activityViewController: UIActivityViewController, subjectForActivityType activityType: String?) -> String { return subject } // UTI for item if it is an NSData. iOS 7.0. will be called with nil activity and then selected activity @objc func activityViewController(activityViewController: UIActivityViewController, dataTypeIdentifierForActivityType activityType: String?) -> String { return typeIdentifier } // if activity supports preview image. iOS 7.0 @objc func activityViewController(activityViewController: UIActivityViewController, thumbnailImageForActivityType activityType: String?, suggestedSize size: CGSize) -> UIImage? { // look at suggestedSize and resize image (see AirDrop sample code for how to do this) return previewImage } } @IBAction func shareButton(sender: AnyObject) { // myData is the object I want to send to be used in my app on another device let itemSource = DataActivityItemSource(myData, "com.foo.ppm.typeIdentifier", "My Amazing Journey", aPreviewImage) let vc = UIActivityViewController(activityItems: [itemSource],applicationActivities: []) presentViewController(vc, animated: true, completion: nil) }