Я разрабатываю приложение, которое должно при запуске загружать JPEG с веб-сайта.
Отображается заставка, затем приложение пытается получить веб-адрес из файла. Если файл отсутствует, я открываю модальное представление (как UIModalPresentationFormSheet), которое имеет текстовое представление для ввода пользователем адреса - адрес затем сохраняется в файле.
Пользователь нажимает кнопку ОК, и делается попытка получить JPEG. Если адрес был неправильным или JPEG не находится на веб-сервере, модальное диалоговое окно должно быть открыто заново, чтобы пользователь мог изменить веб-адрес на правильный.
Контроллер представления заставки содержит следующие методы:
- (void)openAddressDialog
{
serverView *viewController = [[serverView alloc]init];
[viewController setServerAddress:[businessLogic serverAddress]];
[viewController setDelegate:self];
[viewController setModalPresentationStyle:UIModalPresentationFormSheet];
[self presentModalViewController:viewController animated:YES];
}
Интересно, что когда я вызывал метод openAddressDialog из метода viewDidLoad, модальное представление не появлялось. Мне пришлось переместить его в метод viewDidAppear. Таким образом, по-видимому, представление должно находиться в определенном состоянии, прежде чем оно будет принимать модальные представления.
- (void)closeDialog:(UIViewController *)dialogController:(Boolean)actionRequired
{
// If action required, get the server address from the dialog
if (actionRequired)
{
serverView *viewController = (serverView *)dialogController;
NSString *address = [[viewController serverAddress]copy];
[businessLogic setServerAddress:address];
[self dismissModalViewControllerAnimated:YES];
if (![logoImage image])
{
[logoImage setImage:[businessLogic eventLogo]];
if (![logoImage image])
{
[self openAddressDialog];
}
}
}
else
{
exit(0);
}
}
Это метод делегата, вызываемый обратно из модального представления, когда пользователь коснулся OK или Отмена. Параметр actionRequired указывает, что нажата кнопка OK. И если это так, новый адрес сервера выбирается из модального представления, а модальное представление отклоняется. Предпринята попытка получить JPEG с нового адреса (в классе бизнес-правил), и если файл все еще не может быть найден, первый метод, показанный выше (openAddressDialog), вызывается снова, чтобы пользователь мог снова исправить адрес.
Модальный вид отображается нормально с первого раза, но не появится снова, если пользователь ввел неправильный адрес. Имеет ли это какое-то отношение к тому, что я пытался представить модальное представление так быстро после его отклонения?
Я довольно новичок в разработке для iPad, поэтому буду признателен за любые советы.
Еще одна вещь, которая, возможно, демонстрирует мою неопытность в C ++, заключается в том, что ... если я объявлю закрытый метод в файле m, давайте назовем его
- (void) methodB
и этот метод вызывает другой закрытый метод, давайте назовем его
- (void) methodA
methodA должен быть определен в файле m раньше, чем methodB. Если я также хочу, чтобы methodA вызывал methodB, я захожу в тупик. Единственный способ, о котором я знаю, - это объявить methodB в файле h - что делает его общедоступным. Как мне написать этот сценарий, чтобы внешний мир не видел ни один из методов?