2015-01-27 6 views
20

Ich verwende einen UIActivityViewController, um ein Freigabeblatt anzuzeigen, damit Benutzer meine App freigeben können. Ich teste gerade Tweets und bekomme unerwartete Ergebnisse. Beim ersten Tweeten geht alles gut. Beim zweiten Mal erhalte ich eine doppelte Fehlermeldung, die erwartet wird. Das Problem ist, dass der completionWithItemsHandler Erfolg zurückgibt: Bool als wahr!UIActivityViewController Abschluss-Handler gibt Erfolg zurück, wenn der Tweet fehlgeschlagen ist

Ich möchte in der Lage sein, meine eigene personalisierte Nachricht an den Benutzer statt der massiven, die derzeit zurückgegeben wird, anzuzeigen.

Hier ist mein Code:

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

Antwort

5

Ich glaube nicht, dass Sie das Feedback Fluss des UIActivityViewController beeinflussen können, wie es auf hohem Niveau ist, einfach:

@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 

     }) 
    } 
} 

Hier mein Log ist zu verwendende Komponente, die nicht für eine feinkörnige Anpassung geeignet ist.

Sie können jedoch den Status speichern, dass der Benutzer diese genaue Nachricht nach dem ersten Tweet getwittert hat, und dann Twitter von UIActivityController mit excludedActivityTypes und UIActivityTypePostToTwitter deaktivieren. Anstatt einen Fehler für einen doppelten Tweet anzuzeigen, verhindern Sie, dass die Aktionssequenz überhaupt ausgeführt wird.

0

Ich schlage vor,

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

mit

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

Das ist für mich zu ersetzen gearbeitet. Ich hoffe es hilft!

+0

Was bedeutet diese Arbeit allerdings zu erreichen? Sicherlich, indem ich den Completion-Handler entferne, bin ich weit davon entfernt, Fehlermeldungen zu überprüfen/ändern – Swinny89

+0

Ich schlage vor, dies zu testen und dann, wenn es immer noch nicht funktioniert, es zu entfernen. Dies schien für mich zu funktionieren. @ Swinny89 – tdh

+0

Ich habe die Funktion mit dem Abschluss-Handler verwendet, um mit zu beginnen. Die Funktionalität funktioniert immer noch mit/ohne Abschluss-Handler – Swinny89

10

SWIFT 2.0 iOS 8.0>, sollten Sie Abschluss-Handler wie folgt verwenden:

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

Funktioniert nicht mit Swift 3+ – 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) 
Verwandte Themen