在 UILocalNotification 中设置 UserInfo 时出错

Posted

技术标签:

【中文标题】在 UILocalNotification 中设置 UserInfo 时出错【英文标题】:Error when setting UserInfo in UILocalNotification 【发布时间】:2011-10-27 17:23:35 【问题描述】:

我正在尝试将 NSManagedObjectID 附加到 UILocalNotification 但不断收到错误消息: 属性列表格式无效:200(属性列表不能包含“CFType”类型的对象)

这是我的代码(taskID 是一个 NSManagedObjectID):

// Create the new notification
UILocalNotification *newNotice = [[notificationClass alloc] init];
[newNotice setFireDate:date];
[newNotice setTimeZone:[NSTimeZone defaultTimeZone]];
[newNotice setAlertBody:@"Test text"];

// Add the object ID to the userinfo
NSDictionary *myUserInfo = [NSDictionary dictionaryWithObject:taskID forKey:@"TaskID"];
newNotice.userInfo = myUserInfo;

taskID 使用此代码(第一个参数)传递给函数:

addNotification([task objectID], [task taskname], [task taskexpiry]);

task 是一个 NSManagedObject 并且该代码已经过测试并且可以正常运行很长时间。

从我读过的所有内容来看,这应该可以。任何帮助将不胜感激。

杰森

【问题讨论】:

发布定义和实例化taskID 的代码,很可能这就是问题所在。 在帖子中添加了更多关于 taskID 来自何处的信息。 【参考方案1】:

userInfo 必须是有效的属性列表。见What is a Property List?NSManagedObjectID 不是属性列表中允许的任何类型。

尝试使用[[taskID URIRepresentation] absoluteString] 作为您的userInfo。稍后您必须使用-[NSPersistentStoreCoordinator managedObjectIDForURIRepresentation:] 将其转回NSManagedObjectID

【讨论】:

太棒了,做到了!谢谢罗伯。

以上是关于在 UILocalNotification 中设置 UserInfo 时出错的主要内容,如果未能解决你的问题,请参考以下文章

如何在 UILocalNotification.userInfo 中设置 NSManagedObject 信息?

如何在 UNNotificationRequest 中设置重复间隔和触发日期

带有 Residemenu 的 UILocalNotification

在 Swift 2 Xcode 7 Beta 4 中设置基于位置的提醒时出错

在 iPhone OS4 SDK 中设置重复本地通知的结束日期

在 iOS8-iOS9 中设置提醒/警报