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

前端之家收集整理的这篇文章主要介绍了Swift中的通知返回UserInfo在字典中前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个通知返回一个字典,很像在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]

猜你在找的Swift相关文章