在本地存储远程通知

时间:2014-03-24 23:13:39

标签: ios iphone objective-c apple-push-notifications

我尝试将所有推送的通知存储在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没有显示那些通知......为什么?

3 个答案:

答案 0 :(得分:2)

当应用程序仅处于运行状态时,您可以保存通知。如果应用程序处于后台或已关闭,则推送接收但您无法访问并保存有效内容信息,因为在此期间没有任何委托方法将执行< /strong>。您可以在服务器端的帮助下实现此功能,他们可以保存推送的通知。请使用api调用通知此通知列表。

答案 1 :(得分:0)

尝试使用通知的副本而不是原始通知。可以删除数据并且您有一个空引用。

答案 2 :(得分:0)

事实上,保存没有问题,但显示存储的数据。我的解决方案是NSFetchedResultsController中的缓存。