首页 > 解决方案 > 如何在 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 上

标签: appendswift4.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
}

推荐阅读