append - 如何在 macos 应用程序中将值从另一个视图控制器附加到字典?
问题描述
我最近正在开发一个包含存储在字典中的数据的应用程序。然后将该数据存储在用户可以查看的表中。这是数据的存储方式:
Bill(Date: "4/28/18", Item: "something", Amount: 43.67)
我想从辅助视图控制器附加数据,我目前尝试使用的方式是这样的:
ViewController().bills.append(Bill(Date: valueDate, Item: valueItem, Amount: Double(valueAmount)!))
这些变量都是预设的,当我打印出来时工作正常,当我在初始视图控制器中运行此代码时,它工作得很好,但是当我在第二个视图控制器中运行上面的代码时,没有出现错误,但似乎没有完全附加数据。
这是在 Swift 4.1 Xcode 9.4.1 上
解决方案
从所述问题中我所能理解的是,您在 First ViewController 中有您的“票据”数组,并且您在 Second View Controller 中附加了 Bill 对象。您的代码中的问题是您正在第二个 viewController 中为 First View 控制器创建一个新实例,因此您可以访问“bills”数组,但问题是新实例和您原来的 First View 控制器不同。
您可以通过以下方式实现:- 1. 使用委托(您可以点击此链接:- https://medium.com/@jamesrochabrun/implementing-delegates-in-swift-step-by-step-d3211cbac3ef)。
2. 使用通知:- 从您的第二个视图控制器发布通知:-
NotificationCenter.default.post(name: NSNotification.Name(rawValue:"NotificationName"), object: nil, userInfo: ["bill":Bill(Date: valueDate, Item: valueItem, Amount: Double(valueAmount)!)])
这里 NotificationName 可以是任何字符串,并在用户信息中传递您的对象 Bill
然后在 ViewDidLoad 的第一个 View 控制器中删除和添加观察者:-
NotificationCenter.default.removeObserver(self, name:NSNotification.Name(rawValue:"NotificationName") , object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(self.changeTintColor(notification:)), name: NSNotification.Name(rawValue: "NotificationName"), object: nil)
func getData(notification: NSNotification){
let Bill = notification.userInfo!["bill"]
// do your task here
}
推荐阅读
- node.js - 尝试交换身份验证代码以获取凭据时的未授权客户端
- excel - How to extract middle characters from a cell in Excel
- python - 使用 tensorflow 和 numpy 的奇怪数据类型错误
- javascript - 如何使用 React 开发者工具点击按钮?
- webpack - 使用 webpack-chain 和 vue-cli 3 更改生成文件的名称
- selenium - Webdriver 在每个页面上创建新会话
- python - 在 Python 中编译用户定义的正则表达式对象和搜索/匹配
- php - 在 PHP 中抓取网页时获取垃圾输出
- mysql - SQL:检查现在时间戳是否大于过期时间戳
- java - 如何填充每隔一个矩形/Java/acm/棋盘