gpt4 book ai didi

swift - Swift 中的通知在字典中返回 UserInfo

转载 作者:IT王子 更新时间:2023-10-29 05:10:18 27 4
gpt4 key购买 nike

我有一个返回字典的通知,很像在 objective-c 中,但我没有得到我期望的结果。

这是发布通知的方法。它实际上是返回日期选择器的结果(日期)。

@IBAction func dateOfBirthAction(sender: AnyObject) {

println("Date: \(dateOfBirthPicker.date)")

var selectedDateDictionary = [dateOfBirthPicker.date, "dateOfBirth"]

NSNotificationCenter.defaultCenter().postNotificationName("dateOfBirth", object: nil, userInfo: [NSObject():selectedDateDictionary])

}

这是通知观察者:

override func viewDidLoad() {
super.viewDidLoad()

NSNotificationCenter.defaultCenter().addObserver(self, selector: "dateOfBirth:", name: "dateOfBirth", object: nil)

}

func dateOfBirth(notification: NSNotification) {

println("userInfo: \(notification.userInfo)")

let returnedDateOfBirth = notification.userInfo!["dateOfBirth"] as NSString
println("returnedDateOfBirth: \(returnedDateOfBirth)")

playerInformationDateOfBirthLabel.text = returnedDateOfBirth
}

我在行 let returnedDateOfBirth:String = notification.userInfo["dateOfBirth"]

行收到以下错误
userInfo: Optional([<NSObject: 0x7fb15a44a880>: <_TtCSs23_ContiguousArrayStorage00007FB15A4D4380 0x7fb15a4206a0>(
2014-09-18 12:07:07 +0000,
dateOfBirth
)
])
fatal error: unexpectedly found nil while unwrapping an Optional value

完整解决方案

@IBAction func dateOfBirthAction(sender: AnyObject) {

var selectedDateDictionary = ["birthDate" : dateOfBirthPicker.date]

NSNotificationCenter.defaultCenter().postNotificationName("foundABirthDate", object: nil, userInfo:selectedDateDictionary)
}

override func viewDidLoad() {
super.viewDidLoad()

NSNotificationCenter.defaultCenter().addObserver(self, selector: "dateOfBirth:", name: "foundABirthDate", object: nil)

}

func dateOfBirth(notification: NSNotification) {

let playerBirthDate = notification.userInfo!["birthDate"] as NSDate

var dateFormatter: NSDateFormatter = NSDateFormatter()

//Specifies a long style, typically with full text, such as “November 23, 1937”.
dateFormatter.dateStyle = NSDateFormatterStyle.LongStyle

let dateConvertedToString: String = dateFormatter.stringFromDate(playerBirthDate)

playerInformationDateOfBirthLabel.text = dateConvertedToString
}

最佳答案

您的 userInfo 字典有误。

你有:

[NSObject():selectedDateDictionary]

尝试将 userInfo 设置为 userInfo: selectedDateDictionary,如下所示:

NSNotificationCenter.defaultCenter().postNotificationName("dateOfBirth", object: nil, userInfo: selectedDateDictionary)

错误告诉你你期待一个 String 因为 returnedDateOfBirth:String 但你返回 [NSObject():selectedDateDictionary]

关于swift - Swift 中的通知在字典中返回 UserInfo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25933545/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com