2015-01-27 13 views
20

Kullanıcıların benim app paylaşabilmesi için bir paylaşım sayfasını görüntülemek için bir UIActivityViewController kullanıyorum. Şu anda tweet'leri test ediyorum ve bazı beklenmedik sonuçlar elde ediyorum. İlk kez tweet atmak için her şey iyi gidiyor. Ikinci kez, beklenen bir yinelenen tweet hata iletisi alıyorum. Sorun şu ki, completionWithItemsHandler başarıya geri dönüyor: Bool, gerçek!Tweet başarısız olduğunda UIActivityViewController tamamlama işleyicisi başarı döndürür

Kendi kişiselleştirilmiş iletimi, şu anda döndürülen büyük kütleye değil, kullanıcıya gösterebilmek istiyorum. Ben üst düzey olduğu gibi UIActivityViewController geri bildirim akışını etkileyebilir sanmıyorum

2015-01-27 11:10:58.021 Buzz[3239:813859] LaunchServices: invalidationHandler called
2015-01-27 11:10:58.052 Buzz[3239:813860] LaunchServices: invalidationHandler called Activity: com.apple.UIKit.activity.PostToTwitter Success: true Items: nil Error: nil
2015-01-27 11:11:04.134 Buzz[3239:813859] LaunchServices: invalidationHandler called
2015-01-27 11:11:09.182 Buzz[3239:813859] plugin com.apple.share.Twitter.post invalidated

cevap

5

, kolay: Burada

@IBAction func ShareButtonTapped(sender: AnyObject) { 
    let textToShare = "I'm using Buzz! The new way to send emoji's, with sound, it's annoying, funny and amazing" 
    var url = NSURL(string: "-Image url masked out-") 
    var data = NSData(contentsOfURL: url!) 
    let image = UIImage(data: data!) 
    if let myWebsite = NSURL(string: "-redirect masked out-") 
    { 
     let objectsToShare = [textToShare, myWebsite] 
     let activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil) 
     activityVC.completionWithItemsHandler = { 
      (activity, success, items, error) in 
      println("Activity: \(activity) Success: \(success) Items: \(items) Error: \(error)") 
     } 
     self.presentViewController(activityVC, animated: true, completion: {() -> Void in 

     }) 
    } 
} 

benim günlük geçerli: Burada

benim kodudur ince taneli özelleştirme için uygun olmayan kullanımlı bileşen.

Yapabilecekleriniz, kullanıcının ilk tweet'den sonra bu tam mesajı tweetlediği durumu kaydetmek ve ardından excludedActivityTypes ve UIActivityTypePostToTwitter kullanarak UIActivityController'dan Twitter'ı devre dışı bırakmaktır. Bu nedenle, yinelenen bir tweet için bir hata gösterme yerine, eylem sırasının gerçekleşmesini bile engellemezsiniz.

0

ben Bu benim için çalıştı

self.presentViewController(activityVC, animated: true, completion: nil) 

ile

self.presentViewController(activityVC, animated: true, completion: {() -> Void in }) 

değiştirilmesi düşündürmektedir. Umarım yardımcı olur! Böyle

+0

Ne bu iş olsa ulaşmak için geliyor? Kesinlikle tamamlama işleyici kaldırarak ben hata mesajları kontrol etmek/değiştirmek mümkün olmanın bir yolu daha var – Swinny89

+0

Bunu test öneririz ve hala çalışmıyorsa, onu kaldırmak. Bu benim için çalışıyor gibi görünüyordu. @ Swinny89 – tdh

+0

Başlamak için tamamlama işleyicisiyle işlevi kullanıyordum. Tüm işlevler hala tamamlama işleyicisi – Swinny89

10

SWIFT 2.0 iOS 8.0>, kullanmak gerekir tamamlanma işleyici:

self.presentViewController(activityVC, animated: true, completion: nil) 

activityVC.completionWithItemsHandler = {(activityType, completed:Bool, returnedItems:[AnyObject]?, error: NSError?) in 

    // Return if cancelled 
    if (!completed) { 
     return 
    } 

    //activity complete 
    //some code here 


} 
+0

ile çalışıyor/olmadan çalışıyor Swift 3+ ile çalışmıyor – Cesare

13

Use completion handler like this For SWIFT 3 AND 4, iOS 10 AND 11 :

activityVC.completionWithItemsHandler = {(activityType: UIActivityType?, completed: Bool, returnedItems: [Any]?, error: Error?) in 
    if !completed { 
     // User canceled 
     return 
    } 
    // User completed activity 
} 

self.present(activityVC, animated: true, completion: nil) 
İlgili konular