NSUserDefaults - отображение UIAlertView при первом запуске - поведение кнопки - PullRequest
1 голос
/ 06 мая 2011

Я использую NSUserDefaults для отображения UIAlertView при первой загрузке моего приложения. Оповещение имеет кнопку «Отклонить» и «Оценить сейчас». Увольнение говорит само за себя и работает нормально, однако я хочу, чтобы кнопка «Оценить сейчас» открыла соответствующее местоположение в App Store на устройстве. Я использую следующий код в моем файле AppDelegate.m.

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *alertshown = [defaults stringForKey:@"alertshown"]; {
if (alertshown == nil) {

    UIAlertView *oneTimeWelcome = [[UIAlertView alloc]
                                  initWithTitle: @"Thank You"
                                  message: @"Blah Blah Blah Blah"
                                  delegate: self
                                  cancelButtonTitle:@"Dismiss"
                                  otherButtonTitles:@"Rate Now",nil];
    [oneTimeWelcome show];
    [oneTimeWelcome release];

    [defaults setObject:@"alertwasdisplayed" forKey:@"alertshown"];
}

При предыдущем использовании второй кнопки в UIAlertView я использовал этот код для вызова нового представления;

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if (buttonIndex == 0)
    {
        // Do something wonderful here
    }
    else if (buttonIndex == 1)
    {
        AppSupportView *controller = [[AppSupportView alloc] initWithNibName:@"AppSupportView" bundle:nil];
        controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
        [self presentModalViewController:controller animated:YES];
        [controller release];

    }

Однако, это не работает, когда код используется в файле AppDelegate.m ?? Любые примеры были бы хороши, чтобы получить мою кнопку Оценить сейчас, чтобы открыть App Store. Извините за форматирование, но это не позволило мне изменить текст

РЕДАКТИРОВАТЬ - Это полный код, с которым я имею дело в файле AppDelegate.m

{// Этот следующий блок кода отображает UIAlert, когда пользователь впервые открывает приложение. Это отображается только если alerthown == 0

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *alertshown = [defaults stringForKey:@"alertshown"]; {
if (alertshown == nil) {

    UIAlertView *oneTimeWelcome = [[UIAlertView alloc]
                                  initWithTitle: @"Thank You"
                                  message: @"Thanks, please rate blah blah blah"
                                  delegate: self
                                  cancelButtonTitle:@"Dismiss"
                                  otherButtonTitles:@"Rate Now",nil];
    [oneTimeWelcome show];
    [oneTimeWelcome release];

    [defaults setObject:@"alertwasdisplayed" forKey:@"alertshown"];

} }

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {

    if (buttonIndex == 0)
    {
        // Yes, do something
    }
    else if (buttonIndex == 1)
    {

Ответы [ 3 ]

1 голос
/ 06 мая 2011

Убедитесь, что ваш AppDelegate придерживается UIAlertViewDelegate -протокола.

Пример определения из заголовочного файла AppDelegate:

@interface MyAppDelegate : NSObject <UIApplicationDelegate, UIAlertViewDelegate> 
1 голос
/ 06 мая 2011

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

Вы звоните

 [self presentModalViewController]

от делегата приложения, который не является UIViewController. Вам нужно создать экземпляр UIViewController и вызвать его изнутри. Хорошей практикой является выход из приложения applegateate как можно скорее - просто делайте там вещи уровня APP и вставляйте UI, обработку и т. Д. Код в контроллеры представления.

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

Установить некоторые значения по умолчанию для NSUserDefault value -> если оно равно NULL , показать AlertView и заполнить некоторое значение до NSUserdefault. Или ничего.

...