当tweet失败时,UIActivityViewController完成处理程序返回成功

我正在使用UIActivityViewController来显示共享表,以便用户可以共享我的应用程序。 我目前正在testing推文,我收到了一些意想不到的结果。 第一次在推特上,一切顺利。 第二次,我得到一个重复的鸣叫错误消息,这是预期的。 问题是completionWithItemsHandler正在返回成功:布尔为真!

我希望能够向用户显示自己的个性化消息,而不是当前返回的大量消息。

这是我的代码:

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

这是我的日志:

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调用Activity:com.apple.UIKit.activity.PostToTwitter成功:true项目:nil错误:无
2015-01-27 11:11:04.134 Buzz [3239:813859] LaunchServices:invalidationHandler调用
2015-01-27 11:11:09.182 Buzz [3239:813859] plugin com.apple.share.Twitter.post invalidated

SWIFT 2.0 iOS 8.0> ,你应该使用这样的完成处理程序:

 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 } 

我不认为你可以影响UIActivityViewController的反馈stream,因为它是高级的,易于使用的组件,而不是为细粒度的定制量身定做的。

你可以做的是保存用户在第一条推文之后发送了这个确切消息的状态,然后使用excludedActivityTypesUIActivityTypePostToTwitter从UIActivityController中禁用Twitter。 所以,而不是显示一个重复的鸣叫错误,你可以防止行动序列甚至发生。

像这样使用完成处理程序对于SWIFT 3和4,iOS 10和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) 

我build议更换

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

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

这对我有效。 希望能帮助到你!