2015-06-21 160 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,但是在被调用后我得到了一个完整的黑屏。 –