1

我一直在嘗試一切工作。當應用關閉2個自定義項目,類型和ID時,我會收到通知。該類型應該告訴我要加載哪個視圖,並且該id應該告訴應用程序從數據庫中獲取哪一行。我正在試圖解決這個問題。應用程序didreceiveRemoteNotification和跳轉到特定視圖

我需要點擊通知,並讓我帶到相關記錄。到目前爲止,我已經用兩種不同的方法取得了成功,我將在下面概述。

我還要指出的是,我所知道的有效載荷從APNS正常工作,因爲我已經是調試死亡:)

我想的第一件事就是如下:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 
{ 

    NSString *itemType = [[userInfo objectForKey:@"T"] description]; 
    NSString *itemId = [[userInfo objectForKey:@"ID"] description]; 

    self.window=[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 

    // type 1 = call, type 2 = contact 
    if ([itemType isEqual: @"1"]) { 
     Leads_CallsDetailViewController *callView = [[Leads_CallsDetailViewController alloc] init]; 
     [callView displayItem:itemId]; 
     [self.window addSubview:callView.view]; 
     [self.window makeKeyAndVisible]; 
    } else if([itemType isEqual: @"2"]) { 
     Leads_ContactsDetailViewController *contactView = [[Leads_ContactsDetailViewController alloc] init]; 
     [contactView displayItem:itemId]; 
     [self.window addSubview:contactView.view]; 
     [self.window makeKeyAndVisible]; 
    } 
} 

隨着這一個,我有一個名爲displayItem的詳細視圖的方法,我將用它從api獲取數據,然後顯示它。這做了一些事情,但它看起來像從未真正加載的視圖。我在頁面上有一個滾動視圖和各種按鈕,但是從addSubview加載的所有內容都是背景圖片。沒有任何事情真的發生完全加載視圖。我不知道該如何處理。

我試過的第二件事是直接去像這樣的觀點:

NSString *storyboardId = @"Leads_Calls_SB"; 
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
UIViewController *initViewController = [storyboard instantiateViewControllerWithIdentifier:storyboardId]; 
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
self.window.rootViewController = initViewController; 
[self.window makeKeyAndVisible]; 

這一個似乎加載視圖功能和漂亮的有兩個主要注意事項期待。 1.我不確定如何將數據傳遞給它,以及2.當我試圖回彈時它不喜歡它,當我嘗試從那裏繼續推進時它也很生氣,就好像沒有導航一樣即使整個應用程序嵌入在導航控制器中,也是如此。

非常感謝您的幫助。如果有人能幫我弄清楚這一點,我會很感激你。

回答

5

通常情況下這一要求,我會做這個..

  1. 使用NSNotificationCenter和後從didReceiveRemoteNotification的通知。

    [[NSNotificationCenter defaultCenter] postNotificationName:@"notificationReceived"  object:self userInfo:userInfo]; 
    
  2. 從VC訂閱它可以打開您的詳細信息視圖以顯示消息。

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notificationReceived:) name:@"notificationReceived" object:nil]; 
    
  3. 如果你自己實例化VC並且不使用segue。你可以做到這一點..

    UIStoryboard* storyBoard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
    detailVC = [storyBoard instantiateViewControllerWithIdentifier:@"detailVC"]; 
    detailVC.delegate = self; 
    
    detailVC.userInfo = @"YOUR DATA"; 
    [self presentViewController:detailVC animated:YES completion:nil]; 
    
  4. 要返回您可以在您的詳細VC做..

    [self dismissViewControllerAnimated:YES completion:nil]; 
    
+0

酷。我明天將會處理這個問題,並且還有一個問題。我試圖在NSNotificationCenter上閱讀,我很困惑這到底是什麼。當我點擊通知時,我想創建一個名稱爲notificationReceived的通知中心,是否正確?然後從那裏,我創建一個監聽器在我的詳細信息視圖。然後我介紹詳細視圖。 NSNotificationCenter中實際的數據傳遞如何發生?或者我只是從userInfo傳入數據?如果後者,那麼我需要NSNotificationCenter。對不起,如果這是一個痛苦,只是想明白! :D –

+0

嗨克里斯,NSNotificationCenter有一個發佈者訂閱模式。你可以使用userInfo參數傳遞數據。 NSNotificationCenter的美妙之處在於,它使得你的應用程序鬆散耦合並傳遞數據,而無需在發送者和接收者之間直接引用。 – travoux

相關問題