2016-03-22 5 views
0

UIActivityViewControllerを使用してAirDrop経由でiOSデバイス上のアプリケーションから別のiOSデバイスへデータ(NSData)を送信しようとしています。私は私のアプリのplistで新しいCSM(カスタムデータ型)を作成しました。 public.filename-extension = ppm。 したがって、私は送信しようとしているNSDateオブジェクトにppm拡張を追加しますか?あなたがUIActivityViewControllerを表示したときに、オブジェクトImの送信に自分のアプリの公開拡張子(ppm)がないと、自分のアプリのアイコンがUIActivityViewControllerウィンドウに表示されないと考えていますか?本当に混乱している! は、相続人は、私がUIActivityViewControllerUIActivityViewController経由でカスタムデータを送信

@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 sample codeでそれを見てみる必要があります私のアプリで

答えて

3

を使用するためにカスタムデータを送信されますあなた自身のファイルタイプを定義し、それを他のデバイス上のあなたのアプリケーションと共有する場合を扱います。生データを共有したい場合は、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) 

} 
+0

例を示してくれてありがとう、私は今、学び、Multipeerフレームワークを他のデバイスにデータを渡すための成功した方法としてアプリに実装しました。 – pete

関連する問題