Как добавить значения в словарь из другого контроллера представления в приложении 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


person Ashrith Kanakanala    schedule 07.08.2018    source источник
comment
Не могли бы вы поделиться точным кодом, который вы написали во втором контроллере?   -  person Nancy Madan    schedule 08.08.2018
comment
Извините, если это сбивает с толку, эта вторая строка кода - это именно то, что написано во втором контроллере представления. Однако, если вам нужен весь этот файл, боюсь, я не могу этого сделать из соображений конфиденциальности.   -  person Ashrith Kanakanala    schedule 09.08.2018


Ответы (1)


Все, что я могу понять из указанной проблемы, это то, что у вас есть массив «счетов» в первом контроллере просмотра, и вы добавляете объект Билла во второй контроллер просмотра. Проблема в вашем коде заключается в том, что вы создаете новый экземпляр для контроллера первого представления в своем втором контроллере представления, поэтому вы можете получить доступ к массиву «счетов», но проблема в том, что новый экземпляр и ваш исходный контроллер первого представления отличаются.

Вы можете добиться этого: - 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: -

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
}
person Nancy Madan    schedule 09.08.2018