将数组数据从一个视图控制器发送到另一个
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()
【讨论】:
以上是关于将数组数据从一个视图控制器发送到另一个的主要内容,如果未能解决你的问题,请参考以下文章