我正在使用Core Data开发时间管理应用程序。问题是:如何通过NSLocalNotification的userInfo传递NSManagedObject的实例。打包userInfo非常简单:
NSURL *uri = [[self objectID] URIRepresentation];
NSData *uriData = [NSKeyedArchiver archivedDataWithRootObject:uri];
NSDictionary *userInfo = @{ @"Name" : self.name,
@"Activity" : uriData };
问题在于从userInfo获取对象。我使用Cocoa with love中描述的方法。但是当执行didReceiveLocalNotification:
方法时,我得到了异常:
由于未捕获的异常而终止应用 'NSInvalidArgumentException',原因:' - [__ NSCFData relativeString]: 无法识别的选择器发送到实例0x787c69b0'
以下是我在didReceiveLocalNotification:
NSURL *uri = [notification.userInfo objectForKey:@"Activity"];
NSManagedObjectID *objectId = [[self.context persistentStoreCoordinator] managedObjectIDForURIRepresentation:uri];
我将不胜感激任何帮助! 谢谢!
答案 0 :(得分:1)
从userInfo字典获取的Activity对象属于NSData
类,而不是NSURL
。
尝试解开它之前:
NSData *uriData = [notification.userInfo objectForKey:@"Activity"];
NSURL *uri = [NSKeyedUnarchiver unarchiveObjectWithData:uriData];
NSManagedObjectID *objectId = [[self.context persistentStoreCoordinator] managedObjectIDForURIRepresentation:uri];