2015-02-04 3 views
3

Я пытаюсь запланировать локальное уведомление с некоторыми пользовательскими данными, которые я прочитал, когда пользователь откроет приложение, щелкнув уведомление.iOS локальное уведомление userInfo всегда null

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

UILocalNotification *notification = [[UILocalNotification alloc] init]; 
notification.fireDate = [[NSDate date] dateByAddingTimeInterval:10]; 
notification.alertBody = @"Hello World!"; 
notification.userInfo = [[NSDictionary alloc] initWithObjectsAndKeys: 
         @"123123123123", @"beaconUUID", 
         [NSNumber numberWithInt:10], @"beaconMajor", 
         [NSNumber numberWithInt:20], @"beaconMinor", 
         nil]; 
[[UIApplication sharedApplication] scheduleLocalNotification:notification]; 

Затем в коде, который обрабатывает уведомление, что я делаю это:

- (void)onAppDidBecomeActive:(NSNotification*)notification 
{ 
    NSLog(@"Object = %@", [notification object]); 

    NSDictionary* userInfo = [notification userInfo]; 
    NSLog(@"UserInfo = %@", userInfo); 

    NSString* beaconUUID = [userInfo objectForKey:@"beaconUUID"]; 
    NSLog(@"Beacon UUID = %@", beaconUUID); 
} 

Моя проблема заключается в том, что, когда я пытаюсь прочитать USERINFO его всегда возвращает null. Как читать словарь userInfo из объекта NSNotification?

Три NSLog вызовов из приведенной выше коды образца печати следующего в консоли:

2015-02-04 14:11:52.690 BeaconPlugin[17050:724150] Object = <UIConcreteLocalNotification: 0x7ff1d37199a0>{ 
fire date = Wednesday, February 4, 2015 at 2:11:51 PM Central European Standard Time, 
time zone = (null), 
repeat interval = 0, 
repeat count = UILocalNotificationInfiniteRepeatCount, 
next fire date = (null), 
user info = { 
    beaconMajor = 10; 
    beaconMinor = 20; 
    beaconUUID = 123123123123; 
}} 
2015-02-04 14:11:52.691 BeaconPlugin[17050:724150] UserInfo = (null) 
2015-02-04 14:11:52.691 BeaconPlugin[17050:724150] Beacon UUID = (null) 

Что действительно показывает, что словарные значения являются частью информации о пользователе. У кого-нибудь есть идеи, что я делаю неправильно?

+1

Откуда у вас этот метод? Я думаю, что это должно быть: '- (void) applicationDidBecomeActive: (UIApplication *) application'. В любом случае, ваше приложение должно вызывать 'приложение: DidReceiveLocalNotification: (UILocalNotification *) уведомление', и вы сможете получить к нему доступ, как вы это делаете. – mbm29414

+0

Я разрабатываю плагин для Phonegap, и это моя функция, которая вызывается из appDelegate.m. Таким образом я могу создать плагин без редактирования файла делегата приложения. – Mathyn

ответ

5

Вы назначили UILocalNotification, но вы получаете информацию о своем пользователе от NSNotification, это два не то же самое.

вы должны сделать это:

UILocalNotification *localNotif = [notification object]; 
NSDictionary *userInfo = [localNotif userInfo]; 
NSString* beaconUUID = [userInfo objectForKey:@"beaconUUID"]; 
+0

Отлично! Это сработало, спасибо за помощь! – Mathyn

1

Его работал, когда я получаю от didReceiveLocalNotification протокола

в AppDelegate.m файл

-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification 
{ 
    UIApplicationState state = [application applicationState]; 
    NSLog(@"Object = %@", notification); 

    NSDictionary* userInfo = [notification userInfo]; 
    NSLog(@"UserInfo = %@", userInfo); 

    NSString* beaconUUID = [[notification userInfo] objectForKey:@"beaconUUID"]; 
    NSLog(@"Beacon UUID = %@", beaconUUID); 

} 

см ниже консоли вывода

2015-02-04 19:11:12.937 SampleNO[6676:907] Object = <UIConcreteLocalNotification: 0x769e780>{fire date = Wednesday, February 4, 2015, 7:11:09 PM India Standard Time, time zone = (null), repeat interval = 0, repeat count = UILocalNotificationInfiniteRepeatCount, next fire date = (null), user info = { 
     beaconMajor = 10; 
     beaconMinor = 20; 
     beaconUUID = 123123123123; 
    }} 
    2015-02-04 19:11:14.621 SampleNO[6676:907] UserInfo = { 
     beaconMajor = 10; 
     beaconMinor = 20; 
     beaconUUID = 123123123123; 
    } 
    2015-02-04 19:11:18.086 SampleNO[6676:907] Beacon UUID = 123123123123 
Смежные вопросы