1

Я пробовал все, чтобы это исправить. Я получаю уведомление, когда приложение закрыто с двумя настраиваемыми элементами, типом и идентификатором. Предполагается, что тип скажет мне, какой вид загрузки загрузить, а 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, а затем отображать его. Это что-то делало, но это выглядело так, будто представление никогда не загружалось. У меня есть scrollview и различные кнопки на странице, но все, что когда-либо загружалось из 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. Подписаться на него из ВК, где вы можете открыть ваши детали просмотра, чтобы показать сообщение.

    [[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

Смежные вопросы