2016-08-16 2 views
2

Кто-нибудь знает, как использовать UIActivityView в iOS 10? Теперь, когда по какой-то причине в Swift 3.0 он будет компилироваться и создаваться, но когда приложение запускается после нажатия кнопки общего доступа, используя следующий код, это приводит к сбою приложения ... он отлично работал в iOS 9.3 и Swift 2.0.UIActivityViewController в iOS 10

Как указано в комментариях к строке кода 6 или let objectsToShare = [textToShare] as! AnyObject вызывает thread1: SIGABRT сигнала и приложения аварии

@IBOutlet weak var detailDescriptionLabel: UITextView! 

@IBAction func share(_ sender: AnyObject) { 
     let textToShare = detailDescriptionLabel.attributedText 

     let objectsToShare = [textToShare] as! AnyObject 
     // line above causes app crash in iOS 10 - compiled and built 
     // error is "Thread1: signal SIGABRT" 

     let activityVC = UIActivityViewController(activityItems: objectsToShare as! [AnyObject], applicationActivities: nil) 

     activityVC.popoverPresentationController?.sourceView = (sender as! UIView) 
     self.present(activityVC, animated: true, completion: nil) 
    } 


class ActivityForNotesViewController: UIActivityViewController { 

    internal func _shouldExcludeActivityType(_ activity: UIActivity) -> Bool { 
     let activityTypesToExclude = [ 
      //insert UIActivity here 
     ] 

     if let actType = activity.activityType { 
      if activityTypesToExclude.contains(actType) { 
       return true 
      } 
      else if super.excludedActivityTypes != nil { 
       return super.excludedActivityTypes!.contains(actType) 
      } 
     } 
     return false 
    } 
} 

Любой, кто может мне помочь, я ценю это.

+1

Почему вы создаете массив для AnyObject. Это не имеет большого смысла. – Andy

+0

@ Энди. Я не слишком уверен, почему я действительно это сделал. По какой-то причине, хотя я удаляю этот текст из кода, который компилятор жалуется. это имеет смысл и более эффективно не делать актерский состав, но я не на 100% о том, как еще заставить его работать без него. – KSigWyatt

+0

Если бы мне пришлось угадать, это было бы потому, что функция 'UIActivityViewController (activityItems:' использует приведение в объявлении функции здесь 'objectsToShare as! [AnyObject]' – KSigWyatt

ответ

0

Я думаю, что, возможно, я ответил на свой вопрос, но если кто-то может проверить дважды, я был бы признателен. Комментарии в коде - это различные изменения, которые я сделал, чтобы заставить это исправление работать. Работает в iOS 10 в Simulator и в реальном устройстве.

@IBAction func share(_ sender: AnyObject) { 
     // Changed attributedText to text! 
     let textToShare = detailDescriptionLabel.text! 

     // Removed Cast to AnyObject 
     let objectsToShare = [textToShare] 

     //Removed cast to AnyObject in the Function Call to get rid of error from removing it above 
     let activityVC = UIActivityViewController(activityItems: objectsToShare , applicationActivities: nil) 


//Moved cast for as! UIView outside the perantheses of sender so 
//that the as! can be used more efficiently. But most importantly 
// I changed the as! to a as? instead thinking that might catch an error and it did... so this works. 

     activityVC.popoverPresentationController?.sourceView = (sender) as? UIView 
       self.present(activityVC, animated: true, completion: nil) 
} 
2
let objectsToShare = [textToShare] 

let activityVC = UIActivityViewController(activityItems: objectsToShare , applicationActivities: nil) 

Должен быть способ, чтобы использовать его.

Смежные вопросы