首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在多个ViewControllers之间访问/传递公共数据

在多个ViewControllers之间访问/传递公共数据
EN

Stack Overflow用户
提问于 2015-10-19 16:52:10
回答 1查看 219关注 0票数 0

我对在Swift中进行开发相当陌生,而且我似乎正在为其中的一个关键概念而苦苦挣扎。

我希望在不同的UIViewControllers之间传递数据,允许它们都访问和操作它。

例如,在我的应用程序中,我创建了一个简单的数据存储类,其中包含项和数组。我希望所有的ViewControllers都可以访问这个数组。

我在AppDelegate中初始化存储:

代码语言:javascript
运行
复制
var itemStore = ItemStore()

然后,我创建第一个UIViewController并传入存储,这样它就可以访问它:

代码语言:javascript
运行
复制
FirstViewController(itemStore: ItemStore)

因此,要做到这一点,我需要更改FirstViewController的初始化,以便它能够接受itemStore作为参数。

然后,我希望将该数据传递给SecondViewController,然后传递给ThirdDataController。

对我来说,似乎没有必要编辑每个UIViewController类,以便它接受itemStore作为参数。

我在这里有什么选择?有些人告诉我将数据存储为AppDelegate的属性,这样所有人都可以访问它。然而,这似乎不是做这件事的正确方式。

有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2015-10-19 17:15:30

您可以使用如下所示的段传递数据:

代码语言:javascript
运行
复制
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
    if (segue.identifier == “segueTest”) {

        var svc = segue.destinationViewController as secondViewController;

        svc.toPass = textField.text
    }   
}  

另一种解决方案

代码语言:javascript
运行
复制
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解决方案以保存数据

代码语言:javascript
运行
复制
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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33210276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档