Напоминание уведомлений в среде вкладок - PullRequest
0 голосов
/ 23 ноября 2011

У меня есть вопрос относительно отображения напоминаний о локальных уведомлениях внутри приложения. Я думаю, что проблема заключается в контроллере вида.

вот код, который у меня есть:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    UIViewController *viewController1, *viewController2;
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
        viewController1 = [[Number1ViewController alloc] initWithNibName:@"Number1ViewController_iPhone" bundle:nil];
        viewController2 = [[SettingsViewController alloc] initWithNibName:@"SettingsViewController_iPhone" bundle:nil];
    } else {
        viewController1 = [[Number1ViewController alloc] initWithNibName:@"Number1ViewController_iPad" bundle:nil];
        viewController2 = [[SettingsViewController alloc] initWithNibName:@"SettingsViewController_iPad" bundle:nil];
    }
    self.tabBarController = [[UITabBarController alloc] init];
    self.tabBarController.viewControllers = [NSArray arrayWithObjects:viewController1, viewController2, nil];


        UILocalNotification *notification = [launchOptions objectForKey:

                                             UIApplicationLaunchOptionsLocalNotificationKey];


        if (notification) {

            NSString *stringReminder = [notification.userInfo 

                                      objectForKey:@"TextforReminder"];

            [viewController showReminder:stringReminder];


        }


    }



    application.applicationIconBadgeNumber = 0;
    [[UIApplication sharedApplication] cancelAllLocalNotifications];


    self.window.rootViewController = self.tabBarController;
    [self.window makeKeyAndVisible];
    return YES;
}

или

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {

    UIApplicationState state = [application applicationState];

    if (state == UIApplicationStateInactive) {

        application.applicationIconBadgeNumber = 0;
        [[UIApplication sharedApplication] cancelAllLocalNotifications];


        NSString *stringReminder = [notification.userInfo

                                  objectForKey:@"TextforReminder"];

        [viewController showReminder:stringReminder];

    }

}

Однако я получаю ошибки, связанные с контроллером представления. Использование необъявленного идентификатора 'viewController'. Я понимаю, что это потому, что нет контроллера представления, однако я не понимаю, как мне добиться, чтобы в процессе показывалось Напоминание.

Большое спасибо за вашу помощь, я не буду больше заниматься этой проблемой.

Приветствия

1 Ответ

0 голосов
/ 23 ноября 2011

Поскольку ваше предупреждение пытается сообщить вам, что проблема в application:didFinishLaunchingWithOptions: в.

if (notification) {
    NSString *stringReminder = [notification.userInfo objectForKey:@"TextforReminder"];
    [viewController showReminder:stringReminder];
}
application.applicationIconBadgeNumber = 0;
[[UIApplication sharedApplication] cancelAllLocalNotifications];

UIViewController не имеет метода с именем showReminder:, поэтому я предполагаю, что он входит в ваш подкласс одного из ваших UIViewController подклассов.

Вам нужно сделать две вещи,

1) Заменить «viewController» на «viewController1» или «viewController2», в зависимости от того, какой метод имеет showReminder:

2) Вам нужно подождать, пока эти viewController-ы действительно появятся на экране, прежде чем показывать больше представлений поверх них. Поэтому переместите блок выше до [self.window makeKeyAndVisible], но до return YES.

Отредактировано как комментарий говорит SettingViewController будет иметь метод showReminder:;

Насколько проблема получения LocalNotifications во время работы приложения. Если ваше приложение простое, то, возможно, просто замените 'viewController' на:

(SettingsViewController *)[self.tabBarController.viewControllers objectAtIndex:1]

Поскольку в коде вы добавляете его как второй элемент свойства viewControllers.

...