Как открыть новый вид при открытии push-уведомления, когда приложение закрыто? - PullRequest
0 голосов
/ 07 мая 2011

Так что я пытаюсь сделать, когда вы щелкаете мышью по представлению при получении push-уведомления, когда приложение открывается, оно имеет представленное представление и нажимает новый контроллер с подробностями, касающимися уведомления. Я использую UITabBarController с UINavigationControllers. Любая помощь будет высоко ценится, я пытался искать, но я не мог найти ничего, что указало бы мне в правильном направлении. Текущий код ниже:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound)];

[application setStatusBarStyle:UIStatusBarStyleBlackOpaque];

tabBarController = [[UITabBarController alloc] init];

controller = [[controller alloc] init];
UINavigationController *controller1 = [[[UINavigationController alloc] initWithRootViewController:controller] autorelease];
controller1.tabBarItem.image = [UIImage imageNamed:@"icon_news.png"];
[controller setTitle:@"View"];
[controller release];

controller = [[controller alloc] init];
UINavigationController *controller2 = [[[UINavigationController alloc] initWithRootViewController:controller] autorelease];
controller2.tabBarItem.image = [UIImage imageNamed:@"icon_news.png"];
[controller setTitle:@"View"];
[controller release];

controller = [[controller alloc] init];
UINavigationController *controller3 = [[[UINavigationController alloc] initWithRootViewController:controller3] autorelease];
controller3.tabBarItem.image = [UIImage imageNamed:@"icon_news.png"];
[controller setTitle:@"View"];
[controller release];

controller = [[controller alloc] init];
UINavigationController *controller4 = [[[UINavigationController alloc] initWithRootViewController:controller] autorelease];
controller4.tabBarItem.image = [UIImage imageNamed:@"icon_news.png"];
[controller setTitle:@"View"];
[controller release];

controller = [[controller alloc] init];
UINavigationController *controller5 = [[[UINavigationController alloc] initWithRootViewController:controller] autorelease];
controller5.tabBarItem.image = [UIImage imageNamed:@"icon_news.png"];
[controller setTitle:@"View"];
[controller release];

tabBarController.viewControllers = [NSArray arrayWithObjects:controller1, controller2, controller3, controller4, controller5, nil];

[window addSubview:tabBarController.view];

[window makeKeyAndVisible];

launchDefault = YES;
//[self performSelector:@selector(handlePostLaunch) withObject:nil afterDelay:0];

// Push Notification info

NSDictionary *apns = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];

NSString *result =  [[[apns valueForKey:@"aps"] valueForKey:@"alert"] valueForKey:@"loc-args"];

NSString *playerID = [NSString stringWithFormat:@"%@", result];

playerID = [[playerID componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]] componentsJoinedByString:@""];

playerID = [playerID stringByReplacingOccurrencesOfString:@"  " withString:@""];

playerID = [playerID stringByReplacingOccurrencesOfString:@"(" withString:@""];

playerID = [playerID stringByReplacingOccurrencesOfString:@")" withString:@""];

NSLog(@"Player ID: %@", playerID);

if (![playerID isEqualToString:@"null"]) {
    if (!detailViewController) {
        detailViewController = [[PlayerDetailViewController alloc] init];
    }

    NSManagedObjectContext *moc = [[AppController sharedAppController] managedObjectContext];

    NSFetchRequest *req = [[NSFetchRequest alloc] init];

    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Players"
                                              inManagedObjectContext:moc];
    [req setEntity:entity];

    NSPredicate *pre = [NSPredicate predicateWithFormat:@"playerID=%@", playerID];
    [req setPredicate:pre];

    NSError *error;
    NSArray *list = [moc executeFetchRequest:req error:&error];

    [req release];

    Players *player = [list lastObject];

    [detailViewController setPlayer:player];

    //Want to Push view here

    [detailViewController release];

    detailViewController = nil;
}

return YES;

}

1 Ответ

0 голосов
/ 07 мая 2011

Если приложение запускается по уведомлению, оно будет присутствовать в словаре application:didFinishLaunchingWithOptions: launchOptions делегата приложения под ключом UIApplicationLaunchOptionsRemoteNotificationKey, в котором есть вся информация, которую имеет уведомление (JSON, преобразованный в NSDictionary, я считаю).

EDIT:

Понял вопрос неправильно, я думаю, что вы ищете только указатель на текущий выбранный контроллер навигации. Вы получите это, если запросите [tabbarcontroller selectedViewController], который возвращает видимый контроллер навигации. Затем просто поместите вновь созданный контроллер поверх стека этого контроллера навигации.

...