Как зарегистрироваться для NSNotification от UILocalNotification? - PullRequest
3 голосов
/ 29 декабря 2010

У меня есть приложение с вкладками и, скажем, я хочу переключиться на вторую вкладку и всплыть в 12:00, даже если мое приложение не запущено.

Я получил весь код для UILocalNotificationработает правильно, но тогда я подумал, что лучший способ сделать это - опубликовать уведомление от делегата приложения:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

    // Add the tab bar controller's view to the window and display.
    [window addSubview:tabBarController.view];
    [window makeKeyAndVisible];

    // Handle launching from a notification when the app is NOT running
    UILocalNotification *localNotification = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];
    if (localNotification) {
        [tabBarController setSelectedIndex:1];
        [[NSNotificationCenter defaultCenter] postNotificationName:@"AlertNotification" object:self];
    }
    return YES;
}

Затем, в моем SecondViewController.m, у меня будет:

- (void)viewDidLoad {
  [super viewDidLoad];
  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(popUpAlert:) name:@"AlertNotification" object:nil];
}

Но это не работает.Я подозреваю, что уведомление отправляется, пока viewDidLoad SecondViewController еще не был вызван, верно?Возможно ли это решить?И согласны ли вы с моим подходом использования NSNotificationCenter в этом случае?

Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 29 декабря 2010

Я быстро создал тестовый проект и запустил его, поместив регистрацию уведомлений в awakeFromNib (при условии, что SecondViewController создано в xib-файле)

- (void)awakeFromNib {
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(popUpAlert:) name:@"AlertNotification" object:nil];
}
0 голосов
/ 07 апреля 2016
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes: UIUserNotificationTypeAlert | UIUserNotificationTypeBadge categories:nil];
[[UIApplication shareApplication] registerUserNotificationSettings: settings];
0 голосов
/ 29 декабря 2010

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

Другой подход заключается в добавлении свойства bool к делегату приложения, чтобы указать, было ли приложение запущено из локального уведомления. Делегат приложения может быть запрошен из любого места приложения с помощью [[UIApplication sharedApplication] delegate].

...