我对在Swift中进行开发相当陌生,而且我似乎正在为其中的一个关键概念而苦苦挣扎。
我希望在不同的UIViewControllers之间传递数据,允许它们都访问和操作它。
例如,在我的应用程序中,我创建了一个简单的数据存储类,其中包含项和数组。我希望所有的ViewControllers都可以访问这个数组。
我在AppDelegate中初始化存储:
var itemStore = ItemStore()然后,我创建第一个UIViewController并传入存储,这样它就可以访问它:
FirstViewController(itemStore: ItemStore)因此,要做到这一点,我需要更改FirstViewController的初始化,以便它能够接受itemStore作为参数。
然后,我希望将该数据传递给SecondViewController,然后传递给ThirdDataController。
对我来说,似乎没有必要编辑每个UIViewController类,以便它接受itemStore作为参数。
我在这里有什么选择?有些人告诉我将数据存储为AppDelegate的属性,这样所有人都可以访问它。然而,这似乎不是做这件事的正确方式。
有什么建议吗?
发布于 2015-10-19 17:15:30
您可以使用如下所示的段传递数据:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
    if (segue.identifier == “segueTest”) {
        var svc = segue.destinationViewController as secondViewController;
        svc.toPass = textField.text
    }   
}  另一种解决方案
class AnsViewController: UIViewController {
   var theNum: Int
    override func viewDidLoad() {
        super.viewDidLoad()
        println(theNum)
    }
}
override func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) {
    let viewController = self.storyboard.instantiateViewControllerWithIdentifier("ansView") as AnsViewController
    viewController.num = theNum
    self.presentViewController(viewController, animated: true, completion: nil)
}完整的演示解决方案和教程可能会对您有所帮助。
Tutorial
编辑添加的NSUserDefault解决方案以保存数据
let highscore = 1000
let userDefaults = NSUserDefaults.standardUserDefaults()
userDefaults.setValue(highscore, forKey: "highscore")
userDefaults.synchronize() // don't forget this!!!!
Then, when you want to get the best highscore the user made, you have to "read" the highscore from the dictionary like this:
if let highscore = userDefaults.valueForKey("highscore") {
    // do something here when a highscore exists
}
else {
    // no highscore exists
}
I hope this helps!NSUserDefaults支持以下数据类型:
NSString NSNumber NSDate NSArray NSDictionary NSData
这是Complete Demo Code, might be helpful to you
https://stackoverflow.com/questions/33210276
复制相似问题