将数组数据从一个视图控制器发送到另一个

Posted

技术标签:

【中文标题】将数组数据从一个视图控制器发送到另一个【英文标题】: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 的值,它不包含任何数据。 【参考方案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()

【讨论】:

以上是关于将数组数据从一个视图控制器发送到另一个的主要内容,如果未能解决你的问题,请参考以下文章

将数组发送到视图控制器

如何将数据从一个视图控制器发送到另一个视图控制器[重复]

将数据从视图控制器发送到另一个

使用当前模态将数据从一个 uiviewcontroller 发送到另一个 navigationcontroller

单击按钮后将名称附加到数组,然后将其发送到另一个视图控制器

将信息从视图控制器发送到另一个