【发布时间】:2014-11-18 14:35:47
【问题描述】:
在下面回答
我遇到了一个小问题,你可以帮我解决。
我正在开发的应用程序允许您根据您的位置请求内容。
第一个 ViewController 在某种程度上是一种获取您的位置/指定位置 + 一些其他信息以针对特定答案的表单。
我需要执行一个 segue 以将“问题”变量传递到我的第二个 ViewController,在那里我根据问题详细信息加载带有查询的“答案”。
给我带来麻烦的是,每当问题进行地理定位时,我都无法使用 prepareForSegue 检索信息,因为它不等待制作(完成)geoPoint。第二个控制器显示我的纬度和经度为零。
我看到我可以使用“perfomSegueWithIdentifier”调用“prepareForSegue”方法,并在我的第二个视图控制器中检索信息,但它执行了两次转场...如何仅在我准备好但使用prepareForSegue 数据参数需要保留吗?
有没有办法使用 performSegue 将变量从一个控制器传递到另一个控制器? 任何帮助都会很棒。
另外,虽然我认为代码与我的问题无关,但这是我使用的代码。
地理定位方法
@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,而不是从按钮。这样,您可以使用无论如何都会调用 prepareForSegue 的“performSegue”方法以编程方式触发 prepareForSegue。
【问题讨论】:
-
您是否将 segue 从第一个视图控制器直接连接到第二个视图控制器,而不是从第一个视图控制器中的按钮?
-
我确实将 segue 从按钮连接到第二个控制器,是的。然后我将 prepareForSegue 与我的 segue 标识符一起使用。 segue 正在工作,只是我需要在执行 segue 之前等待本地化调用完成。如果它不等待另一侧的位置变量为零(第二个控制器)
-
如果你想以编程方式触发一个segue,你应该将segue从第一个视图控制器直接连接到第二个视图控制器。不要从按钮连接它,否则它会被调用两次。然后你可以在后台任务完成时触发它。
-
好吧,从没想过。我会试一试!谢谢
-
好的,它可以工作。您应该将此作为答案发布,我可以验证它。我已经编辑了我的问题以添加答案。谢谢!