【问题标题】:PrepareforSegue function is never running, variables in additional view controller are blankPrepareforSegue 函数从未运行,附加视图控制器中的变量为空白
【发布时间】:2016-06-19 05:08:25
【问题描述】:

我正在尝试将一些变量发送到另一个视图控制器,并且我正在以编程方式触发 segue。由于某种原因,这些变量永远不会被传递,并且 print 语句永远不会被运行。当我尝试从下一个视图控制器中检索变量时,变量只是 nil 且未分配。我有这个实际触发segue的函数,在我的视图控制器的底部是prepareforsegue:

func action(gestureRecognizer:UILongPressGestureRecognizer) {
    if (lpgr!.state == UIGestureRecognizerState.Began) {
        print("Began")
        let paths = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)
        let documentsDirectory: AnyObject = paths[0]
        let format = NSDateFormatter()
        format.dateFormat="yyyy-MM-dd-HH-mm-ss"
        let dataPath = documentsDirectory.stringByAppendingPathComponent("/video-\(format.stringFromDate(NSDate())).mp4")
        let url = NSURL(fileURLWithPath: dataPath)

        videoOutput!.startRecordingToOutputFileURL(url, recordingDelegate: self)
        print("\(url)")

        NSUserDefaults.standardUserDefaults().setURL(url, forKey: "videoURL")
        NSUserDefaults.standardUserDefaults().synchronize()

    }

    if (lpgr!.state == UIGestureRecognizerState.Ended) {
        print("Ended")
        videoOutput!.stopRecording()
        url = NSUserDefaults.standardUserDefaults().URLForKey("videoURL")!
        videoData = NSData(contentsOfURL: url!)!



        print(videoData)

        presentViewController(PostViewController(), animated: true, completion: nil)



    }
}  

 override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
    if (segue.identifier == "segueTest") {
        var svc = segue!.destinationViewController as! PostViewController;
        print("Variables saved")
        svc.VideoData = videoData
        svc.Url = url

    }
}

【问题讨论】:

    标签: ios swift segue


    【解决方案1】:

    您的 prepareForSegue 永远不会被调用,因为您使用了 presentViewController() 函数。它只是推动另一个视图控制器。 segue 是 Storyboard 中两个视图控制器之间的链接,因此您可以在 Storyboard 中的视图控制器之间添加一个 segue,为 segue 设置一个 ID,然后使用 performSegueWithIdentifier("mySegueID", sender: nil) 代替。

    【讨论】:

    • 您应该接受这个答案。 (投票。)这是正确的答案。
    猜你喜欢
    • 1970-01-01
    • 2015-12-20
    • 1970-01-01
    • 2019-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多