在完成处理程序后执行

时间:2014-11-18 14:35:47

标签: swift segue

以下答案

我面临一个小问题,你可以帮助我。

我正在处理的应用程序允许您根据您的位置请求内容。

第一个ViewController在某种程度上可以获取您的位置/指定位置+一些其他信息来定位特定答案。

我需要执行一个segue将“问题”变量传递给我的第二个ViewController,在那里我根据问题详细信息加载带有查询的“答案”。

导致我麻烦的是,每当问题地理定位时,我都无法使用prepareForSegue检索信息,因为它不等待geoPoint被制作(完成)。第二个控制器显示我的纬度和经度没有。

我看到我可以使用“perfomSegueWithIdentifier”调用“prepareForSegue”方法,并在我的第二个视图控制器中检索信息,但它执行两次segue ...如何在我准备好但是使用时才能触发segue prepareForSegue数据参数我需要保留吗?

有没有办法使用performSegue将变量从一个控制器传递到另一个控制器? 任何帮助都会很棒。

此外,虽然我不认为代码与我的问题相关,但这是我使用的代码。

geoPointing方法

@IBAction func doPostQuestion(sender: UIButton) {

        var thereQ:PFObject = PFObject(className: "tquestion")

        if(somewhereLabel.text == "my location"){
            println("Location is geolocalized")
            PFGeoPoint.geoPointForCurrentLocationInBackground {
                (geoPoint: PFGeoPoint!, error: NSError!) -> Void in
                if error == nil {
                    self.geoLati = geoPoint.latitude as Double
                    self.geoLong = geoPoint.longitude as Double
                    self.performSegueWithIdentifier("goto_results", sender:self)  // call prepareForSegue when ready but implies to have a segue done on click... (performed twiced)
                }
            }

        }
        self.navigationController?.popToRootViewControllerAnimated(true)
    }

prepareForSegue

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

        if(segue.identifier == "goto_results"){

                // Get Label
                let theDestination = (segue.destinationViewController as displayAnswersViewController)
                theDestination.lat = self.geoLati
                theDestination.lng = self.geoLong
        }
    }

答案解决方案:

正如所建议的那样,要解决这个问题,您只需要从viewController1到viewController2创建segue,而不是从按钮创建。这样你就可以使用“performSegue”方法以编程方式触发prepareForSegue,无论如何都会调用prepareForSegue。

1 个答案:

答案 0 :(得分:1)

要解决此问题,您只需要从viewController1到viewController2创建segue,而不是从按钮创建。这样你就可以使用“performSegue”方法以编程方式触发prepareForSegue,无论如何都会调用prepareForSegue。