我尝试将所有推送的通知存储在Core Data中并将其显示给用户。事实上,我已经实现了didReceiveRemoteNotification:
并且它的工作应该如下:
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
NSLog(@"%@", userInfo);
Notification *notify = [NSEntityDescription insertNewObjectForEntityForName:@"Notification" inManagedObjectContext:self.managedObjectContext];
notify.timeStamp = [NSDate date];
notify.alert = [[userInfo valueForKeyPath:@"aps"] valueForKeyPath:@"alert"];
NSError *error;
if (![self.managedObjectContext save:&error]) {
NSLog(@"Couldn't save to persistant store.");
}
}
但是当我将这段代码放在didFinishLaunchingWithOptions:
中的某些条件语句中时:
if (launchOptions != nil)
{
NSDictionary *dictionary = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
if (dictionary != nil)
{
NSLog(@"Launched from push notification: %@", dictionary);
Notification *notify = [NSEntityDescription insertNewObjectForEntityForName:@"Notification" inManagedObjectContext:self.managedObjectContext];
notify.timeStamp = [NSDate date];
notify.alert = [[dictionary valueForKeyPath:@"aps"] valueForKeyPath:@"alert"];
NSError *error;
if (![self.managedObjectContext save:&error]) {
NSLog(@"Couldn't save to persistant store.");
}
}
}
我什么都没得到......我已经尝试创建UIAlertView
并且它正在显示来自aps的正确的aler但是当我尝试保存到持久存储并在MasterViewController中显示它时没有任何反应。
也许有人知道为什么?是因为某种生命周期问题导致了我的中断吗?
我在UIAlertView
内保存成功时尝试放didFinishLaunchingWithOptions:
并显示,我猜所有内容都已正确保存但NSFetchedResultController
没有显示那些通知......为什么?
答案 0 :(得分:2)
当应用程序仅处于运行状态时,您可以保存通知。如果应用程序处于后台或已关闭,则推送接收但您无法访问并保存有效内容信息,因为在此期间没有任何委托方法将执行< /strong>。您可以在服务器端的帮助下实现此功能,他们可以保存推送的通知。请使用api调用通知此通知列表。
答案 1 :(得分:0)
尝试使用通知的副本而不是原始通知。可以删除数据并且您有一个空引用。
答案 2 :(得分:0)
事实上,保存没有问题,但显示存储的数据。我的解决方案是NSFetchedResultsController
中的缓存。