繁体   English   中英

无法将值从一个View Controller传递到另一个View Controller

[英]Not able to pass value from one View Controller to another View Controller

我正在学习Swift,并正在做一个项目,我想从一个视图控制器向另一个视图控制器(地图视图)发送CLLocationCoordinate2D数组,以便我可以一次绘制多个注释。 如果我的CLLocationCoordinate2D数组具有5组经度和纬度,则我希望它们全部传递给我的MapViewController,并且我希望所有注释都可以在MapView中在没有用户交互的情况下绘制。

问题:在我的MapView中,我看到的只是控制台[]中的输出为空,但是我正在从初始视图控制器传递一组经度和纬度。 如何保持价值不变? `

问题:一旦我在Map2ViewController中获得了所有坐标,那么我就可以简单地循环遍历所有元素以绘制注释,因为地图是在MapView中加载的吗?

以下是我到目前为止尝试过的方法。

我的“ SearchBloodViewController.swift” //这是我的初始视图,它生成经度和纬度。

import UIKit
import MapKit


class SearchBloodViewController: UIViewController, UITextFieldDelegate,  CLLocationManagerDelegate 
{
var array: [PFObject] = [PFObject]()
var arra: [CLLocationCoordinate2D] = [CLLocationCoordinate2D]()
var lat_: Int = 0
var long_: Int = 0
@IBOutlet weak var bloodType: UITextField!
@IBAction func search(sender: UIButton)
{
    var query = PFQuery(className: "_User")
    query.whereKey("BloodGroup", equalTo: bloodType.text!)
    do
    {
        try array = query.findObjects() as [PFObject]
    }
    catch
    {

    }
    for arr in array
    {
        self.lat_ = arr["Latitude"] as! Int
        self.long_ = arr["Longitude"] as! Int
        var cor =  CLLocationCoordinate2D.init(latitude: Double(self.lat_), longitude: Double(self.long_))
        arra.append(cor)
        }
            print(arra)
    // The console Output of this is
  //  [C.CLLocationCoordinate2D(latitude: 0.0, longitude: 0.0), 
//C.CLLocationCoordinate2D(latitude: 42.0, longitude: -75.0),
 //C.CLLocationCoordinate2D(latitude: 41.0, longitude: -87.0)]

     }
override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!)
{
    if (segue.identifier == "drawmap")
    {
        let navigationController = segue.destinationViewController as! UINavigationController
        let controller = navigationController.topViewController as! Map2ViewController
      //  controller.delegate = self
        controller.ar = self.arra
       }


   }
  override func viewDidLoad()
   {
       super.viewDidLoad()
   }

我的Map2ViewController :(其中有MapView)

import UIKit
import MapKit
class Map2ViewController: UIViewController
{
    var ar: [CLLocationCoordinate2D] = [CLLocationCoordinate2D]()
    @IBOutlet weak var dispAnnotation: MKMapView!
    override func viewDidLoad()
    {
        super.viewDidLoad()
        print("The values received are \(ar)")
    }   
}

请参阅:序列名称为“ drawmap”。 故事板上有SearchBloodViewController-> NavigationController-> Map2ViewController

Map2ViewController ,在以下行中:

var ar: [CLLocationCoordinate2D] = [CLLocationCoordinate2D]()

您正在创建具有默认值的数组(数据类型为CLLocationCoordinate2D的数组的新实例),因此在加载此控制器时,ar的内容会被空数组覆盖,您只需要创建可为空的var,可以通过segue进行杀伤剂处理:

var ar : [CLLocationCoordinate2D]?

其他一切看起来都很好。

编辑: ar是一个可选的var,因此,如果要打印它的内容,则需要像这样将其拆开:

if let notNullArray = ar {
  print("The values received are \(notNullArray)")
}
let controller = navigationController.topViewController as! Map2ViewController

当上述行被调用时,您的viewDidLoad将被调用,然后仅当您的导航控制器将显示Map2ViewController时。 因此,它将在Map2ViewController的viewDidLoad方法中打印一个空白数组。 我建议您在Map2ViewController的初始化方法中传递数组。

上面的方法适用于没有情节提要的情况。 对于您的情况,我建议您在Map2ViewController的ar变量的setter方法中做任何您想做的事情。

您可以按照以下步骤进行操作:

var ar: [CLLocationCoordinate2D] = {
     didSet {
       print("The values received are \(ar)")
     }
}

解决了我的错误。 实际上,我正在“搜索操作”中设置所有坐标值。 我现在正在做的是,我采用了搜索操作中存在的全部逻辑,并将其放在Prepareforsegue部分中。 因此,现在我的“搜索”操作为空,只做一件事,让我转到下一个屏幕,即map2ViewController。 经度和纬度代码的整体计算和设置已准备好用于segue方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM