alertView из appDelegate не переключает вид на кнопкуIndex

Я пытаюсь создать alertView из appDelegate, но не могу заставить его работать. alertView будет действовать как заявление об отказе от ответственности при первом запуске приложения. Я не могу заставить его работать.. introViewcontroller не появляется. Что я делаю не так? пс. Я использую раскадровки, за исключением intoViewController, который представляет собой файл nib. Мой корневой контроллер представления — это «fisrtViewController», вот мой код: Спасибо..

int a;

и в didFinishLaunchingWithOptions

    if ( a == 0) {

UIAlertView *disclaimer = [[UIAlertView alloc] initWithTitle:@"Read Before use" message:@"By using this app you agree to its terms and conditions.\n\n\n\n\n\n\n\n\n\n\ntext heren\n\n\n\n\n\n\n\n\n\n\n\n\n" delegate:self cancelButtonTitle:@"No!" otherButtonTitles:@"Yes Let me In", nil];

[disclaimer show];
}


// Override point for customization after application launch.
return YES;
}

-(void) alertView:(UIAlertView *) alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
if (buttonIndex == 1) {
  //  FirstViewController *firstView = [[FirstViewController alloc] init];
    a+=1;
  //  [self.viewController presentModalViewController:firstView animated:YES];
}
else if (buttonIndex == 2) {
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Sorry!" message:@"You are not allowed to use this app due to the fact that you did not agree to the terms and Conditions. Please exit this app!" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
    [alert show];

if (buttonIndex ==1) {
       introViewController *intro = [[introViewController alloc] initWithNibName:@"introViewController" bundle:nil];
       [self.viewController presentModalViewController:intro animated:YES];
   introViewController *intro = [[introViewController alloc] initWithNibName:@"introViewController" bundle:nil];
   [self.viewController presentModalViewController:intro animated:YES];
}
}

person snksnk    schedule 23.09.2012    source источник
comment
Ваш код, кажется, работает нормально. Вы уверены, что код выполняется? кроме того, вы должны инициализировать a перед вашим оператором if (a = 0;)   -  person EsbenB    schedule 23.09.2012
comment
да .. контроллер вступительного представления не представляет .. есть идеи, почему?   -  person snksnk    schedule 24.09.2012


Ответы (3)


ааа... Теперь я понимаю, что вы пытаетесь сделать.

Ваша проблема в том, что self.viewController не установлен до того, как вы попытаетесь представить новый модальный ViewController. Кроме того, я думаю, что ваш buttonIndex равен единице.

Вместо этого попробуйте:

if (buttonIndex == 1)
    {
        _window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        introViewController *intro = [[introViewController alloc] initWithNibName:@"introViewController" bundle:nil];
        _window.rootViewController = _intro;
        [_window makeKeyAndVisible];
    }

Поскольку ваша проблема не имеет ничего общего с UIAlertView, вы можете изменить заголовок и описание вашего вопроса, чтобы сделать его более понятным для других, которые борются с аналогичной проблемой.

Удачного кодирования! :)

person EsbenB    schedule 23.09.2012
comment
хорошо .. спасибо, но это не работает. просто чтобы дать вам более четкое изображение симулятора, firstViewController уже находится в фоновом режиме, когда отображается предупреждение, и при нажатии кнопкиIndex он не переключается ни на указанный перо, ни на него можно переключить rootViewController, поскольку firstViewController уже является rootViewController.. спасибо - person snksnk; 24.09.2012
comment
ХОРОШО. Вы должны опубликовать полный код, иначе вы заставите людей гадать вслепую. - person EsbenB; 24.09.2012
comment
вот и все.. я просто говорю, что получилось.. извините, если заставил вас чувствовать себя некомфортно.. вы можете проверить это с помощью Team Viewer? если вы хотите, пожалуйста, свяжитесь со мной по адресу [email protected], чтобы я мог дать вам свои коды доступа .. спасибо - person snksnk; 24.09.2012
comment
чтобы ваш код работал, вы должны где-то построить self.viewController. Я не вижу, где вы это делаете в коде выше. - person EsbenB; 24.09.2012
comment
introViewController *intro = [[introViewController alloc] initWithNibName:@introViewController bundle:nil]; [self.viewController presentModalViewController: анимация вступления: ДА]; это последние 2 строчки.. - person snksnk; 24.09.2012
comment
да. здесь вы создаете IntroViewController. Где вы создаете self.viewController? - person EsbenB; 24.09.2012
comment
давайте продолжим это обсуждение в чате - person snksnk; 24.09.2012

Лучший способ справиться с этим - использовать некоторое значение NSString для записи в файл NSUserDefaults. когда приложение запускается в первый раз с принятием заявления об отказе (например: @"accept"), если пользователь не принимает, также соответствующим образом обновляет это значение NSString(@"notAccept").

В didFinishLaunchingWithOptions

if (![[[NSUserDefaults standardUserDefaults]valueForKey:@"key_disclaimer"] isEqualToString:@"accepted"]) {  
UIAlertView *disclaimer = [[UIAlertView alloc] initWithTitle:@"Read Before use" message:@"By using this app you agree to its terms and conditions.\n\n\n\n\n\n\n\n\n\n\ntext heren\n\n\n\n\n\n\n\n\n\n\n\n\n" delegate:self cancelButtonTitle:@"No!" otherButtonTitles:@"Yes Let me In", nil];   
[disclaimer show];
[disclaimer release];  
//        make sure to release it.  
}

//если пользователь принимает отказ от ответственности.
[[NSUserDefaults standardUserDefaults]setValue:@"accepted" forKey:@"key_disclaimer"];
//если пользователь не принимает отказ от ответственности, [[NSUserDefaults standardUserDefaults]setValue:@ "непринято" forKey:@"key_disclaimer"];

обновите "key_disclaimer" соответственно. это лучший способ. в вашем примере значение использования во времени. если вы закроете и перезапустите приложение, оно снова запросит отказ от ответственности.

в вашем коде
int a;
замените его, используя
int a = 0; все будет хорошо.
спасибо.

person damithH    schedule 23.09.2012
comment
спасибо за разъяснение, но основная проблема, с которой я столкнулся, заключается в том, что соответствующий файл пера не отображается для просмотра, и я не знаю, почему .. какие-либо предложения? - person snksnk; 23.09.2012

Если ваш код в точности такой, как вы написали выше, a не будет равно 0. Если вы явно не установите для него значение 0 при запуске, оно может иметь любое значение.

Если вы хотите проверить, было ли приложение открыто в первый раз после установки, используйте NSUserDefaults, например. (в didFinishWithOptions):

int startCount=[[NSUserDefaults standardUserDefaults] intForKey:@"startCount"];
if (startCount==0]){
  //Is the first start, show your agreement
  //Then increase startCount so that this will not be called at next start
  [[NSUserDefaults standardUserDefaults] setInteger:startCount++ forKey:@"startCount"];
} 

Вы также можете сохранить номер своей версии в файле NSUserDefaults. Таким образом, вы можете проверить, запускает ли пользователь новую версию первым.

person FD_    schedule 23.09.2012
comment
да, у меня нет никаких проблем с этим, так как моя главная проблема в том, что конкретный контроллер просмотра (вступление) не выдвигается для просмотра. Пожалуйста, прочитайте мое полное описание - person snksnk; 23.09.2012
comment
Ах, извините. Вы проверили, что self.viewcontroller не равен нулю? - person FD_; 23.09.2012