2016-12-28 3 views
4

Я хочу использовать объект cutom в userinfo из UNMutableNotificationContent, но он не работает. Когда я помещаю пользовательский объект в userinfo, уведомление не запускается.UNMutableNotificationContent с пользовательским объектом в userinfo

С помощью этого кода, уведомление обжигают:

let content = UNMutableNotificationContent() 
content.title = "title" 
content.body = "body" 
content.categoryIdentifier = "alarmNotificationCategory" 
content.sound = UNNotificationSound.default() 
content.userInfo = ["myKey": "myValue"] as [String : Any] 


let request = UNNotificationRequest(identifier: "alarmNotification", content: content, trigger: nil) 
UNUserNotificationCenter.current().add(request) { error in 
    UNUserNotificationCenter.current().delegate = self 
    if error != nil { 
     print(error!) 
    } 
} 

С ниже, никакой ошибки, но уведомление не не уволили:

let content = UNMutableNotificationContent() 
content.title = "title" 
content.body = "body" 
content.categoryIdentifier = "alarmNotificationCategory" 
content.sound = UNNotificationSound.default() 
content.userInfo = ["myKey": TestClass(progress: 2)] as [String : Any] 


let request = UNNotificationRequest(identifier: "alarmNotification", content: content, trigger: nil) 
UNUserNotificationCenter.current().add(request) { error in 
    UNUserNotificationCenter.current().delegate = self 
    if error != nil { 
     print(error!) 
    } 
} 

TestClass это пользовательский класс, вот это определение:

class TestClass: NSObject, NSSecureCoding { 
    public var progress: Float = 0 

    required override public init() { 
     super.init() 
    } 

    public init(progress: Float) { 
     self.progress = progress 
    } 

    public required convenience init?(coder aDecoder: NSCoder) { 
     self.init() 
     progress = aDecoder.decodeObject(forKey: "progress") as! Float 
    } 

    public func encode(with aCoder: NSCoder) { 
     aCoder.encode(progress, forKey: "progress") 
    } 

    public static var supportsSecureCoding: Bool { 
     get { 
      return true 
     } 
    } 

} 

Есть идеи?

+2

У меня такая же проблема, например, я хочу передать UIImage в USERINFO и не уведомление не уволен вообще. Кажется, что вы можете передавать только примитивные типы (Int, String, floats и т. Д.). – USSliberty

ответ

1

Вы объект должен быть Список свойств

ключи в этом словаре должны быть типы-это свойство-список, они должны быть типы, которые могут быть сериализованы в формат Свойство списка. Информацию о типах списков свойств см. В списке свойств Руководство по программированию.

вы можете преобразовать свой объект в NSData (архив его с помощью NSArchiver)

Смежные вопросы