Ios 如何从另一个视图控制器中的变量获取值

Ios 如何从另一个视图控制器中的变量获取值,ios,swift,nsnotificationcenter,Ios,Swift,Nsnotificationcenter,我试图从ViewController中的PrefsViewController中的4个不同变量中获取值,但当PrefsViewController被解除时,值将重置 ViewController.swift的代码片段 类ViewController:NSViewController,NSWindowDelegate{ var triesEnabled=false var minNumber=0 var maxNumber=20 var max=3 @objc func applyPrefs(){

我试图从ViewController中的PrefsViewController中的4个不同变量中获取值,但当PrefsViewController被解除时,值将重置

ViewController.swift的代码片段
类ViewController:NSViewController,NSWindowDelegate{
var triesEnabled=false
var minNumber=0
var maxNumber=20
var max=3
@objc func applyPrefs(){
让mainSB=NSStoryboard(名称:“Main”,捆绑包:nil)
让prefsVC:PrefsViewController=mainSB.实例化控制器(标识符为:“PrefsViewController”)作为!PrefsViewController
minNumber=prefsVC.prefsMinNum
maxNumber=prefsVC.prefsMaxNum
triesEnabled=prefsVC.prefsTriesEnabled
MaxTrys=prefsVC.prefsMaxTries
print(\(minNumber)\(maxNumber)\(triesEnabled)\(maxTries)//在这里我可以看到它已重置为默认值
resetGame(minRange:minNumber,maxRange:maxNumber,IstrieseEnabled:TrieseEnabled,triesLimit:MaxTrys)
}
重写func viewDidLoad(){
super.viewDidLoad()
NotificationCenter.default.addObserver(self,选择器:#选择器(applyPrefs),名称:Notification.name(“notifyApplyPrefs”),对象:nil)
resetGame(minRange:minNumber,maxRange:maxNumber,IstrieseEnabled:TrieseEnabled,triesLimit:MaxTrys)
}
}
PrefsViewController的片段
class-PrefsViewController:NSViewController{
var-triesOn=false
变量prefsMinNum:Int=0
变量prefsMaxNum:Int=20
var prefsTriesEnabled:Bool=false
变量prefsMaxTries:Int=3
@iAction func closeButton(\发送方:任意){
如果(!minNumTextField.stringValue.isInt | | |!maxNumTextField.stringValue.isInt | |!triesTextField.stringValue.isInt){
let alert=NSAlert()
alert.messageText=“错误”
alert.informativeText=“您只能在文本字段中输入(整数)数字。”
alert.alertStyle=.warning
alert.addButton(标题为“OK”)
alert.runModal()
返回
}
prefsMinNum=Int(minNumTextField.intValue)
prefsMaxNum=Int(maxNumTextField.intValue)
prefsTriesEnabled=triesOn
prefsMaxTries=Int(minNumTextField.intValue)
打印(“minNumTextField:\(prefsMinNum)maxNumTextField:\(prefsMaxNum)triesCheckBox:\(PrefsStriesEnabled)triesTextField:\(prefsMaxTries)”)
NotificationCenter.default.post(名称:Notification.name(“notifyApplyPrefs”),对象:nil)
自我辞退(自我)
}
}

prefs视图显示为一张表(我不知道这是否重要)

当您使用
InstanceControl
时,您正在创建一个新的、以前从未使用过的控制器实例。如果要使用通知传输数据,请在调用
post
时将
self
作为对象发送,然后使用该对象获取变量


您还需要更改
applyPrefs
,使其接受通知参数,以便通知对象对您可用。

谢谢!如何使applyPrefs tase成为通知参数?
func applyPrefs(u-notification:notification)
在发布
object:self
时,这看起来是一个合理的示例: