2016-03-22 28 views
0

Uygulamamdaki bir iOS Aygıtındaki verileri (NSData) UIActivityViewController kullanarak AirDrop aracılığıyla başka bir kişiye göndermeye çalışıyorum. Uygulamalarımda yeni bir CSM (özel veri türü) oluşturdum. Public.filename-extension = ppm. ppm uzantısını, göndermeye çalıştığım NSDate nesnesine nasıl eklerim? Bir UIActivityViewController'ı sunduğunuzda, uygulama Simgesinin uygulamalarımın genel uzantısı (ppm) yok ise UIActivityViewController penceresindeki uygulama Simgelerim görüntülenmeyeceğini düşünüyorum. gerçekten kafam karıştı! Uygulamamda kullanılacak Ben UIActivityViewController sunmaya kullanıyorum İşte kodUIActivityViewController aracılığıyla özel veri gönderme

Temelde
@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) 

    } 

, ben yapmaya çalışıyorum tüm özel veri göndermek edilir

cevap

3

Sen AirDrop sample code bakmak gerektiğini kendi dosya türünüzü tanımlama ve bunu diğer cihazdaki uygulamanızla paylaşma durumunu kapsar. İşlenmemiş verileri paylaşmak istiyorsanız anahtar bölüm, UIActivityItemSource örneğini oluşturmanız ve bunu UIActivityViewController adresine iletmenizdir. Böyle bir şey:

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

Yardımlarınız ve örnek göstermek için teşekkürler ama artık öğrenmiş ve başka bir cihaza veri geçirmeden başarılı bir yol olarak benim app içine Multipeer çerçevesini uyguladık. – pete