AlertView для приостановки кода - PullRequest
0 голосов
/ 15 ноября 2010

Это похоже на белого слона для iPhone. Я пробовал все виды, даже петли, и я не могу заставить его работать.

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

(void)showDBAlert {

    UIActionSheet *alertDialogOpen;
    alertDialogOpen = [[UIActionSheet alloc] initWithTitle:@"DownloadDB?" 
                    delegate:self
                    cancelButtonTitle:@"Use Saved" 
                    destructiveButtonTitle:@"Download DB" 
                                         otherButtonTitles:nil];
    [alertDialogOpen showInView:self.view];
}

Я использую ActionSheet в этом случае. И я реализовал протокол:

@interface ClubTableViewController : UITableViewController <UITableViewDelegate, UITableViewDataSource, UIActionSheetDelegate>

На основании этого я запускаю это, чтобы проверить, какая кнопка была нажата:

(void)actionSheet:(UIActionSheet *) actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {


    NSString *buttonTitle=[actionSheet buttonTitleAtIndex:buttonIndex];

    if ( [buttonTitle isEqualToString:@"Download DB"] ) {

        [self loadDataFromDB];

    }

    if ([buttonTitle isEqualToString:@"Use Saved"] ) {

        self.rows = [NSKeyedUnarchiver unarchiveObjectWithFile:[self archivePath]];

        if (self.rows == nil) {
            [self loadDataFromDB];
        }



    }
}

Проблема в том, что мой код для построения таблицы выполняется до того, как пользователь сделал там выбор. Это вызывает все виды havok. В результате, как я могу приостановить код, пока пользователь не сделал там выбор?

Ответы [ 3 ]

2 голосов
/ 15 ноября 2010

Если вы используете UITableView, вы не сможете «приостановить» код, однако в любом случае этот метод выбора не будет. Возможным решением было бы загрузить пустую таблицу (return 0 в (UITableView *)tableView:numberOfRowsInSection), пока пользователь не выберет что-либо, а затем перезагрузить данные tableView с помощью [tableView reloadData];

0 голосов
/ 15 ноября 2010

Добавьте [self.tableView reloadData]; в конце метода делегата actionSheet.Это снова вызовет все методы UITableViewDataSource.

0 голосов
/ 15 ноября 2010

В вашем tableView: numberOfRowsInSection: просто возвращайте ноль, пока пользователь не примет решение.

...