Показать UIAlertView на заставке - PullRequest
0 голосов
/ 20 июля 2010

Я имел обыкновение показывать заставку, которая в фоновом режиме загружает некоторые данные из сети, я также проверяю, что если местоположение пользователя изменяется с одного города на другой, я хочу показать в предупреждении пользователю с сообщением, чтоВы сейчас в "CityName" хотели бы вы видеть данные из этого города?

У меня есть приложение с вкладками, и я представил экран-заставку следующим образом в классе делегата приложения.

SplashViewController *controller = [[SplashViewController alloc] initWithNibName:nil bundle:nil];
tabBarController.view.frame = [[UIScreen mainScreen] bounds];
controller.tabBarController = self.tabBarController;
[application setStatusBarStyle:UIStatusBarStyleBlackOpaque];
[window addSubview:controller.view ];
//[window addSubview:tabBarController.view ];

[self.tabBarController presentModalViewController:controller animated:YES];
[window makeKeyAndVisible];
[controller release];

Теперь, когда я показываю экран с предупреждением, происходит сбой приложения с сообщением «EXC_BAD_ACCESS»и трассировка стека показывает, что _buttonClick выпущен в классе UIAlertView.

Пожалуйста, посоветуйте, что мне делать, я также пытался с UIActionSheet, но та же проблема с этой вещью тоже.

Я думаю, что естьнекоторая проблема с моделью в текущем представлении (SplashView).

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 22 июля 2010

Я решил эту проблему, проблема была в том, что мой Splash View был смоделированным представлением и вызывался

[self.tabBarController presentModalViewController: контроллер анимирован: ДА];

что я сделал, я переместил загрузку данных на другой контроллер представления, и там я могу показывать предупреждения и справиться с этим

0 голосов
/ 20 июля 2010

Вы пытаетесь отобразить свой UIAlertView внутри вашего SplashViewController viewDidAppear?Если нет, я бы попробовал это в первую очередь.Я также хотел бы убедиться, что у вас правильно настроен метод UIAlertView clickedButtonAtIndex, чтобы попытаться перехватить происходящее.

UIAlertView *alert = [[UIAlertView alloc] 
    initWithTitle:@"Your Location Has Changed" 
    message:@"Your location has changed since you last opened opened THEAPP. Would you like to refresh your data?" delegate:self 
    cancelButtonTitle:@"Cancel" 
    otherButtonTitles:@"OK", nil];
alert.tag = 1;
[alert show];
[alert autorelease];

Затем для метода clickedButtonAtIndex:

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

    //--NSLog(@"You clicked button #%i",buttonIndex);

    if (alertView.tag == 1){

        if (buttonIndex == 0) {
            //--NSLog(@"CANCEL");

        } else if (buttonIndex == 1) {
            //--NSLog(@"OK");

        }
    }
}

Выполнение всего этогона заставке должно быть хорошо, если вы принимаете во внимание требования HIG по использованию местоположения пользователей.Надеюсь, это поможет!

...