如何在MacOS应用程序中将值从另一个ViewController附加到字典?

时间:2018-08-07 01:47:36

标签: append swift4.1

我最近正在开发一个包含存储在字典中的数据的应用程序。然后将此数据存储在用户可以查看的表中。数据的存储方式如下:

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上

1 个答案:

答案 0 :(得分:0)

从陈述的问题中我所能理解的是,您在First ViewController中拥有“帐单”数组,并且在Second View Controller中附加了Bill对象。  代码中的问题是您要在第二个viewController中为First View控制器创建一个新实例,因此您可以访问“帐单”数组,但问题是新实例和原始的First View控制器是不同的。

您可以通过以下方法实现: 1.使用代理(您可以点击以下链接:-https://medium.com/@jamesrochabrun/implementing-delegates-in-swift-step-by-step-d3211cbac3ef)。
2.使用通知: 通过第二个View控制器发布通知:-

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
}