2014-03-24 105 views
0

我試圖將所有推送的通知存儲在覈心數據中並將其顯示給用戶。事實上,我已經做了執行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,但是當我嘗試保存到持久存儲和diplay它在MasterViewController中沒有任何反應。

也許有人知道爲什麼?是因爲我打斷了某種生命週期問題嗎?

編輯

我試圖把UIAlertView當保存成功裏面didFinishLaunchingWithOptions:和它顯示,所以我想一切都正確保存,但NSFetchedResultController不顯示這些通知,爲什麼?

回答

0

嘗試使用通知的副本,而不是原始通知。數據可以被刪除,並且你有一個空的參考。

0

事實上,保存沒有問題,但顯示存儲的數據。我的解決方案是緩存在NSFetchedResultsController

2

只有當應用程序處於運行狀態時,才能保存通知。 如果應用程序在後臺或關閉,推接收,但你不能訪問和保存有效載荷信息,因爲沒有委託方法將在這段時間執行。你可以在服務器端的幫助下實現這一點,他們可以保存推送通知。通過api調用通過此通知列表。