Обработчик завершения UIActivityViewController возвращает успех, когда твит не сработал
Я использую UIActivityViewController для отображения общей папки, чтобы пользователи могли делиться моим приложением. В настоящее время я тестирую твиты, и я получаю неожиданные результаты. В твиттере в первый раз все идет хорошо. Во второй раз, я получаю дублирующее сообщение об ошибке твита, которое ожидается. Проблема в том, что завершениеWithItemsHandler возвращает успех: Bool как true!
Я хочу иметь возможность отображать мое собственное персонализированное сообщение пользователю, а не массивное, которое возвращается в настоящее время.
Вот мой код:
@IBAction func ShareButtonTapped(sender: AnyObject) {
let textToShare = "I'm using Buzz! The new way to send emoji's, with sound, it 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 называется
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 недействителен
Ответы
Ответ 1
Использовать обработчик завершения так: 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)
Ответ 2
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
}
Ответ 3
Я не думаю, что вы можете повлиять на поток обратной связи UIActivityViewController, поскольку это высокоуровневый, простой в использовании компонент, который не предназначен для тонкой настройки.
Однако вы можете сохранить состояние, в котором пользователь вычитал это точное сообщение после первого твита, а затем отключить Twitter из UIActivityController с помощью excludedActivityTypes
и UIActivityTypePostToTwitter
. Таким образом, вместо того, чтобы показывать ошибку для дублированного твита, вы предотвращаете даже последовательность действий.
Ответ 4
Я предлагаю заменить
self.presentViewController(activityVC, animated: true, completion: { () -> Void in })
с
self.presentViewController(activityVC, animated: true, completion: nil)
Это сработало для меня. Надеюсь, это поможет!