2015-01-27 14 views
20

Sto utilizzando un UIActivityViewController per visualizzare un foglio di condivisione in modo che gli utenti possano condividere la mia app. Attualmente sto testando i tweet e sto ottenendo dei risultati inaspettati. Su Twitter per la prima volta, tutto va bene. La seconda volta, ricevo un messaggio di errore tweet duplicato, che è previsto. Il problema è che il completamentoWithItemsHandler sta tornando successo: Bool come vero!Il gestore di completamento di UIActivityViewController restituisce il successo quando tweet ha fallito

Voglio essere in grado di visualizzare il mio messaggio personalizzato per l'utente piuttosto che il massiccio che viene restituito al momento.

Ecco il mio codice:

@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 

     }) 
    } 
} 

Ecco il mio registro:

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

risposta

5

Non credo che si può influenzare il flusso di feedback del UIActivityViewController in quanto è di alto livello, facile componente di uso non personalizzato per la personalizzazione a grana fine.

Che cosa si può fare, però, è quello di salvare lo stato che l'utente ha inviato un tweet questo messaggio esatto dopo il primo tweet e quindi disattivare Twitter da UIActivityController utilizzando excludedActivityTypes e UIActivityTypePostToTwitter. Quindi, invece di mostrare un errore per un tweet duplicato, si impedisce che la sequenza di azioni si verifichi.

0

suggerisco di sostituire

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

con

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

Questo ha funzionato per me. Spero che sia d'aiuto!

+0

Cosa lavoro per raggiungere però? Sicuramente rimuovendo il gestore di completamento sono ancora più lontano dalla possibilità di controllare/modificare i messaggi di errore – Swinny89

+0

suggerisco di provarlo, e poi, se ancora non funziona, rimuoverlo. Questo sembrava funzionare per me. @ Swinny89 – tdh

+0

Inizialmente utilizzavo la funzione con il gestore di completamento. La funzionalità funziona ancora con/senza il gestore di completamento – Swinny89

10

SWIFT 2.0 iOS 8.0>, si dovrebbe usare gestore di completamento in questo modo:

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

Non funziona con 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) 
Problemi correlati