我有一个通知返回一个字典,很像在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 returnDateOfBirth: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",userInfo:selectedDateDictionary) } override func viewDidLoad() { super.viewDidLoad() NSNotificationCenter.defaultCenter().addObserver(self,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",userInfo: selectedDateDictionary)
错误是告诉你,你期望一个String,因为returnedDateOfBirth:String,但你返回[NSObject():selectedDateDictionary]