PushWoosh UIWebview

Готов выставить себя дураком:

У меня есть приложение-скелет, в котором есть классы уведомлений PushWoosh. Работает нормально. Я могу отправить push-сообщение в свое приложение.

Для этого в моем AppDelegate есть метод под названием

- (void) onPushAccepted:(PushNotificationManager *)pushManager withNotification:(NSDictionary *)pushNotification

это позволяет мне запускать материал, когда уведомление принято.

Между тем, в моем ViewController у меня есть такой метод:

-(void)loadURL{
    NSLog(@"testing");
    [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:TOPIC]]];
    [webView reload];
}

Этот отлично работает при вызове из самого ViewController.

Однако, когда я пытаюсь вызвать этот метод из метода onPushAccepted в appDelegate, webView не показывает желаемый URL-адрес, хотя, как показывает запись в журнале, метод вызывается.

Думаю, это показывает, что мне не хватает фундаментального понимания того, как все это работает.

Поэтому я был бы удовлетворен некоторыми строками, которые заставили бы эту работу работать, но я был бы очень рад объяснению того, почему и как это стоит.

Я попытался поместить onPushAccepted: в ViewController, но это вообще не сработало, хотя я включил необходимый «PushNotificationManager.h» в ViewController.m.

Я в замешательстве, и мне нужна твоя помощь.

Думаю, ваш ответ приблизит меня к основам.

Впереди спасибо!


person Sjakelien    schedule 03.01.2014    source источник
comment
Установите точку останова в методе и проверьте значение webview в инспекторе переменных. Вероятно, webview nil   -  person Hugo Tunius    schedule 04.01.2014
comment
Хорошо, и если да, что мне делать?   -  person Sjakelien    schedule 04.01.2014
comment
Как позвонить -(void)loadURL из AppDelegate?   -  person Hugo Tunius    schedule 04.01.2014
comment
ViewController * vc = [[ViewController alloc] инициализация]; [vc loadURL];   -  person Sjakelien    schedule 04.01.2014
comment
Вы не можете просто создать экземпляр своего ViewController с помощью init. ViewController загружается из пера или раскадровки? Или вы создаете это с помощью кода. В любом случае вы захотите вызвать - (void)loadURL для экземпляра ViewController, который отображается на экране, поэтому создание нового "на лету" не сработает.   -  person Hugo Tunius    schedule 04.01.2014
comment
Мой viewController является частью раскадровки. Часть [init] для меня тоже не имеет смысла. Однако, как уже говорилось, NSLog (@testing) появляется в моей консоли. Почему-то webView не отвечает.   -  person Sjakelien    schedule 04.01.2014
comment
позвольте нам продолжить обсуждение в чате   -  person Sjakelien    schedule 04.01.2014


Ответы (1)


В этом конкретном случае Sjakelien использовал приложение с одним представлением. Путаница заключалась в том, что попытка создать экземпляр ViewController в AppDelegate, выполнив следующие действия ViewController * vc = [[ViewController alloc]init]; [vc loadURL];, не сработала.

В этом случае решением является получение ViewController, отображаемого на экране, с помощью

- (void) onPushAccepted:(PushNotificationManager *)pushManager withNotification:(NSDictionary *)pushNotification {
  ViewController *vc = (ViewController*)self.window.rootViewController;
  [vc loadURL];
}

Приложения с другими настройками, например UINavigationController, должны выполнять другие действия.

Несколько вариантов:

  • popToRootViewController, создайте новый экземпляр ViewController и поместите его в стек навигации.

  • Поместите новый экземпляр ViewController в стек навигации без использования popToRootViewController

  • Представьте ViewController в модальном
  • Изменить модель приложения
person Hugo Tunius    schedule 03.01.2014
comment
Спасибо, Хьюго. Для тех людей, у которых такой же жалкий уровень навыков программирования: все это означает, что вместо того, чтобы создавать новое представление, вам нужно полностью сканировать до существующего представления, чтобы отправить свое сообщение. Следующий шаг для меня: уделить больше внимания существованию rootViewController и всей парадигме, окружающей это явление. Мне очень неловко. - person Sjakelien; 04.01.2014