2016-08-16 4 views
2

누구나 iOS 10에서 UIActivityView를 사용하는 방법을 알고 있습니까? 이제는 Swift 3.0에서 어떤 이유로 컴파일되고 빌드되지만 응용 프로그램이 다운되는 코드 결과를 사용하여 공유 버튼을 누른 후 응용 프로그램이 실행되면 iOS 9.3 및 Swift 2.0에서 완벽하게 작동합니다. 신호 SIGABRT와 응용 프로그램 충돌 나는 그것을 감사하겠습니다 나를 도울 수iOS 10의 UIActivityViewController

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

사람 : 코드 라인 6 let objectsToShare = [textToShare] as! AnyObject의 의견에 지정된대로

이 Thread1이 발생합니다.

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

그것을 사용하는 방법이어야한다.