使用NSLocalNotification的userInfo字典传递NSManagedObject

时间:2014-10-21 17:44:50

标签: ios objective-c core-data

我正在使用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];

我将不胜感激任何帮助! 谢谢!

1 个答案:

答案 0 :(得分:1)

从userInfo字典获取的Activity对象属于NSData类,而不是NSURL。 尝试解开它之前:

NSData *uriData = [notification.userInfo objectForKey:@"Activity"];
NSURL *uri = [NSKeyedUnarchiver unarchiveObjectWithData:uriData];
NSManagedObjectID *objectId = [[self.context persistentStoreCoordinator] managedObjectIDForURIRepresentation:uri];