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

Swi*_*y89 30 twitter ios uiactivityviewcontroller swift

我正在使用UIActivityViewController来显示共享表,以便用户可以共享我的应用程序.我正在测试推文,我得到了一些意想不到的结果.在第一次发推文时,一切顺利.在第二次,我得到一个重复的推文错误消息,这是预期的.问题是completionWithItemsHandler返回成功:Bool为true!

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

这是我的代码:

@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

        })
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的日志:

2015-01-27 11:10:58.021 Buzz [3239:813859] LaunchServices:invalidationHandler名为
2015-01-27 11:10:58.052 Buzz [3239:813860] LaunchServices:invalidationHandler,名为Activity:com.apple.UIKit.activity. PostToTwitter成功:true项目:nil错误:nil
2015-01-27 11:11:04.134 Buzz [3239:813859] LaunchServices:invalidationHandler名为
2015-01-27 11:11:09.182 Buzz [3239:813859]插件com.apple .share.Twitter.post无效

Sou*_*men 28

像这样使用完成处理程序对于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)
Run Code Online (Sandbox Code Playgroud)

  • 即使按取消,完成也总是返回真 (2认同)
  • 这对我有用,即使用户在另一个应用程序(例如 Gmail)中取消,“已完成”也会返回 false。 (2认同)

Ada*_*nic 13

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


}
Run Code Online (Sandbox Code Playgroud)

  • 可以说我点击了Whats App,但是在打开Whats App之后,我没有共享它并按“取消”。那我怎么知道共享不成功。 (2认同)

Tee*_*ppa 8

我不认为你可以影响UIActivityViewController的反馈流,因为它是高级,易于使用的组件,不适合细粒度的自定义.

但是,你可以做的是保存用户在第一条推文之后发布这条确切消息的状态,然后使用excludedActivityTypes和 禁用UIActivityController中的Twitter UIActivityTypePostToTwitter.因此,不会显示重复推文的错误,而是阻止动作序列发生.