首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >userInfo对象UILocalNotification的符合性要求

userInfo对象UILocalNotification的符合性要求
EN

Stack Overflow用户
提问于 2016-05-14 17:42:59
回答 1查看 482关注 0票数 0

使用Swift-2.2,

我想将'struct‘或'class对象’传递给userInfo of UILocalNotification。(见代码-下图)。

您能告诉我如何修改这个结构才能符合UserInfo的要求吗?

我读到了一些关于

UserInfo不能是一个结构(但我也尝试过一个类--它也不起作用)

( b) "plist类型“符合->但我如何做到?

( c) "NSCoder“和"NSObject”的一致性--> --但我怎么做呢?

运行以下代码时收到的错误消息是:

“无法序列化userInfo”

谢谢你在这方面的帮助。

代码语言:javascript
复制
struct MeetingData {
    let title: String
    let uuid: String
    let startDate: NSDate
    let endDate: NSDate
}

let notification = UILocalNotification()
notification.category = "some_category"
notification.alertLaunchImage = "Logo"
notification.fireDate = NSDate(timeIntervalSinceNow: 10)
notification.alertBody = "Data-Collection Request!"
//        notification.alertAction = "I want to participate"
notification.soundName = UILocalNotificationDefaultSoundName

let myData = MeetingData(title: "myTitle",
                          uuid: "myUUID",
                     startDate: NSDate(),
                       endDate: NSDate(timeIntervalSinceNow: 10))

// that's where everything crashes !!!!!!!!!!!!!!
notification.userInfo = ["myKey": myData] as [String: AnyObject]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-14 19:23:51

正如UILocalNotification.userInfo的文档所述:

您可以将任意的键值对添加到此字典中。但是,键和值必须是有效的属性-列表类型;如果没有,则引发异常。

您需要自己将数据转换为此类型。你可能想做这样的事情:

代码语言:javascript
复制
enum Keys {
    static let title = "title"
    static let uuid = "uuid"
    static let startDate = "startDate"
    static let endDate = "endDate"
}
extension MeetingData {
    func dictionaryRepresentation() -> NSDictionary {
        return [Keys.title: title,
                Keys.uuid: uuid,
                Keys.startDate: startDate,
                Keys.endDate: endDate]
    }
    init?(dictionaryRepresentation dict: NSDictionary) {
        if let title = dict[Keys.title] as? String,
            let uuid = dict[Keys.uuid] as? String,
            let startDate = dict[Keys.startDate] as? NSDate,
            let endDate = dict[Keys.endDate] as? NSDate
        {
            self.init(title: title, uuid: uuid, startDate: startDate, endDate: endDate)
        } else {
            return nil
        }
    }
}

然后可以使用myData.dictionaryRepresentation()转换为字典,使用MeetingData(dictionaryRepresentation: ...)从字典进行转换。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37229919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档