Я пытаюсь отобразить баннер с помощью Toast, если приложение получает уведомление, находясь на переднем плане.Ошибка приложения при отображении удаленного уведомления
Простой случай прекрасно работает без каких-либо проблем ..
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
UIView *parentView = [UIApplication sharedApplication].keyWindow.rootViewController.view;
[parentView makeToast:@"toast"];
}
однако, когда я пытаюсь показать пользовательский вид моей, я получаю плохую EXC_BAD_ACCESS
ошибку на showToast
метода:
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
UIView *bannerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.topController.view.frame.size.width, 80)];
UIView *parentView = [UIApplication sharedApplication].keyWindow.rootViewController.view;
bannerView.backgroundColor = [UIColor redColor];
[parentView showToast: bannerView duration:3.0 position:CSToastPositionTop completion:nil];
}
Is - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
метод опасное место для программирования этого типа поведения? Имея сильную ссылку на parentView, похоже, не работает, как я могу определить, какой объект получает заново?
Является ли «parentView» нием, когда вы вызываете «showToast» на нем? Кстати, почему вы пытаетесь получить «rootViewController»? Разве вы не должны видеть текущий видимый контроллер? – Alex
Я не думаю, что родительский вид равен нулю, первый пример тоже потерпит неудачу, верно? Мой корневой вид является навигационным контроллером, поэтому я считаю его безопасным? –
Работает ли 'makeToast' вместо' showToast', где вы получаете плохой доступ? – Alex