【问题标题】:Sending array data from one view controller to another将数组数据从一个视图控制器发送到另一个
【发布时间】:2015-07-23 12:19:45
【问题描述】:

我正在尝试将数组从一个视图控制器复制到另一个视图控制器,但不知何故它不起作用。我尝试使用此代码:

let otherVC = TerningspilletViewController()
        mineSpillere = otherVC.mineSpillere2
        println("otherVC")

在我想要发送数据的视图控制器中,有以下代码:

var mineSpillere = ["Spiller 1", "Spiller 2", "Spiller 3"]

将要接收此数据的视图控制器具有以下代码:

var mineSpillere2 = [String]()

var mineSpillere”将显示文本,但是当我尝试显示它时,它说“var mineSpillere”为空。有什么建议/想法吗?

【问题讨论】:

  • 如果你想分配给 mineSpillere2,也许你应该把mineSpillere = otherVC.mineSpillere2 反转为otherVC.mineSpillere2
  • @Laffen - 我已经做到了,但仍然无法正常工作..
  • var mineSpillere2 = [String]() 行在哪里,确保它在方法之外,也许可以考虑使用!?
  • 您的示例告诉我 var mineSpillere 被分配了 otherVC.mineSpillere2 的值,它不包含任何数据。

标签: swift


【解决方案1】:

如果您想访问另一个 viewController 的数组,那么您可以将其保存在内存中,为此您可以这样使用 NSUserDefaults

//save
var mineSpillere = ["Spiller 1", "Spiller 2", "Spiller 3"]
var defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject(mineSpillere, forKey: "YourKey")

现在您可以通过这种方式从任何地方阅读它:

//read
if let testArray : AnyObject? = NSUserDefaults.standardUserDefaults().objectForKey("YourKey") {
    var readArray : [NSString] = testArray! as! [NSString]
    println(readArray)
}

如果你想用你的旧方法做代码:

FirstViewController.swift

import UIKit

class FirstViewController: UIViewController {

    var mineSpillere = ["Spiller 1", "Spiller 2", "Spiller 3"]
    override func viewDidLoad() {
        super.viewDidLoad()
    }
}

SecondViewController.swift

import UIKit

class SecondViewController: UIViewController {

    var mineSpillere2 = [String]()
    override func viewDidLoad() {
        super.viewDidLoad()

        let otherVC = FirstViewController()
        mineSpillere2 = otherVC.mineSpillere
        println(mineSpillere2)  //[Spiller 1, Spiller 2, Spiller 3]
    }

}

【讨论】:

  • 我将不得不使用您给我的第一个代码,使用 NSUserDefaults,但尝试加载时出现错误:s28.postimg.org/iwxu0tf4t/…
  • 检查您的密钥。它应该与您保存数组相同。
  • 关于“readArray”的问题。如何在 viewDidView 将数据从“readArray”放入“mineSpillere”。
【解决方案2】:

第一次结帐你是否使用故事板

如果您使用故事板

let otherVc = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle()).instantiateViewControllerWithIdentifier("storyboardIdendifier") as? TerningspilletViewController
otherVC.mineSpillere2 =  mineSpillere 
println(otherVc)

否则就这样做

let otherVC = TerningspilletViewController()
    otherVC.mineSpillere2 =  mineSpillere
    println("otherVC")

【讨论】:

    【解决方案3】:

    如果您使用故事板,我建议将数据传递到prepareForSegue

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == "TerningspilletViewSegue" {
            let otherVc = segue.destinationViewController as! TerningspilletViewController
            otherVc.mineSpillere = mineSpillere
        }     
    }
    

    【讨论】:

      【解决方案4】:

      尝试这段代码正常工作,将数据从一个视图控制器发送到另一个视图控制器。只需引用情节提要 ID,您就可以将数据从一个视图发送到另一个视图。然后我们基于该对象引用创建该类对象,我们可以访问该数组并那些类属性然后只是附加它。

       let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
      let secondView = storyBoard.instantiateViewController(withIdentifier: "tableView") as! TableViewController.
      self.present(secondView, animated: true) {
          let data = nameArray
          secondView.models.append(data!)
          secondView.tableView.reloadData()
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-24
        • 1970-01-01
        • 2017-02-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多