簡體   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