我最近正在开发一个包含存储在字典中的数据的应用程序。然后将此数据存储在用户可以查看的表中。数据的存储方式如下:
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上
答案 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
}