2015-06-21 156 views
1

好吧,讓我的ActivityViewController正常工作時正常共享,但每當用戶在調用ActivityViewController後點擊取消,我就會得到惱人的致命錯誤。Swift取消ActivityViewController導致致命錯誤

fatal error: unexpectedly found nil while unwrapping an Optional value 

所以看起來我沒有很好地解開我的選擇權。這裏的共享方法:

@IBAction func share(sender: UIBarButtonItem) { 
     var memeedimage = generateMemedImage() 


     let activityViewController = UIActivityViewController(activityItems:[memeedimage] , applicationActivities: nil) 
     presentViewController(activityViewController, animated: true, completion: nil) 


     activityViewController.completionWithItemsHandler = { 
      (activity, success, returneditems, error) in 
      println("Activity: \(activity) Success: \(success) Items: \(returneditems) Error: \(error)") 
      self.save() 

      activityViewController.dismissViewControllerAnimated(true, completion:{ 
       let memevc:MemeTableViewController = MemeTableViewController() 
       self.presentViewController(memevc, animated: true, completion: nil) 
       }) 
     } 

和共享方法調用使用隱含展開可選導致的錯誤,會生成一個名爲米姆對象保存功能:

func save(){ 
     var meme : MemeObject! 

      meme = MemeObject(textFieldtop : texfieldtop.text! ,textFieldbottom : textfieldbottom.text! ,image : imagePickerView.image! , memedImage : generateMemedImage()) 
      (UIApplication.sharedApplication().delegate as! AppDelegate).memes.append(meme!) 

    } 

所以我決定安全地拆禮物米姆可選值但調用的另一個問題現在

func save(){ 
     var meme : MemeObject? 
     if let memez = meme{ 
      meme = MemeObject(textFieldtop : texfieldtop.text! ,textFieldbottom : textfieldbottom.text! ,image : imagePickerView.image! , memedImage : generateMemedImage()) 
      (UIApplication.sharedApplication().delegate as! AppDelegate).memes.append(meme!) 
     } 

     else{ 
      println("Optionals man") 
     } 

    } 

當對象不是零,「選配人」打印不應該發生而C在共享方法中ompletionwithitemshandler屬性沒有提供在用戶共享對象後應該直接發生的表視圖控制器。

代碼MemeTableViewController:

​​

任何幫助嗎?

回答

0

看了你的代碼後,好像你還沒有初始化變量'meme'。

func save(){ 
     var meme : MemeObject? = MemeObject(textFieldtop : texfieldtop.text! ,textFieldbottom : textfieldbottom.text! ,image : imagePickerView.image! , memedImage : generateMemedImage()) 

     if let memez = meme{ 
      (UIApplication.sharedApplication().delegate as! AppDelegate).memes.append(meme!) 
     } 

     else{ 
      println("Optionals man") 
     } 

    } 
} 

@IBAction func share(sender: UIBarButtonItem) { 
var memeedimage = generateMemedImage() 


let activityViewController = UIActivityViewController(activityItems:[memeedimage] , applicationActivities: nil) 
presentViewController(activityViewController, animated: true, completion: nil) 


activityViewController.completionWithItemsHandler = { 
    (activity, success, returneditems, error) in 
    println("Activity: \(activity) Success: \(success) Items: \(returneditems) Error: \(error)") 
    self.save() 

    let memevc = self.storyboard!.instantiateViewControllerWithIdentifier("MemeTableViewConroller") as! MemeTableViewController 

    self.presentViewController(memevc, animated: true, completion: nil) 
} 
} 

rembember to set storyboardID

+0

表視圖控制器仍然沒有得到初始化 '梅梅' 後調用。想知道爲什麼? –

+0

你不需要調用activityViewController.dismissViewControllerAnimated。我編輯了我的答案。請看看它。 – agy

+0

好吧,現在我認爲ActivityViewController調用了TableViewController,但是在被調用後我得到了一個完整的黑屏。 –