2016-08-16 14 views
2

誰もがiOS 10でUIActivityViewを使用する方法を知っていますか? Swift 3.0では何らかの理由でコンパイルとビルドが行われるようになりましたが、次のコードを使用して共有ボタンを押した後にアプリケーションが実行されているときにアプリケーションクラッシュが発生しました... iOS 9.3とSwift 2.0では完全に機能しました。コード行6またはlet objectsToShare = [textToShare] as! AnyObjectのコメントで指定されているようにiOS 10のUIActivityViewController

は、スレッド1の原因:シグナル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

@Andyなぜ私は実際にそれをやったのか分かりません。何らかの理由で、コードからそのテキストを削除しても、コンパイラは不平を言います。それは意味をなさないし、キャストを作成しない方が効率的ですが、私はそれがなくても動作させる方法について100%ではありません。 – KSigWyatt

+0

もし私が推測しなければならなかったのは、 'UIActivityViewController(activityItems:'関数はここでは 'objectsToShare as![AnyObject]' – KSigWyatt

答えて

0

私は自分の質問に答えるかもしれないと思っていますが、誰かが二重にチェックできるなら、私はそれを感謝します。コード内のコメントは、この問題を解決するために行ったさまざまな変更です。シミュレータのiOS 10と実際のデバイスで動作します。

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

それを使用する方法でなければなりません。

関連する問題