UISwitch вызывает API-вызов Restful, который завершается неудачно, хотел бы вернуть значение UISwitch - PullRequest
0 голосов
/ 30 июня 2011

Мое приложение представляет собой набор инструментов VOIP-телефонии.

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

Когда пользователь меняет настройку, мне нужно позвонить на платформу телефонии через ее Restful API. Если вызов Restful завершится неудачно, я хотел бы сбросить переключатель к его предыдущей настройке. Например, если пользователь включает идентификатор вызывающего абонента, и он выходит из строя из-за сбоя соединения, я бы хотел, чтобы коммутатор снова переключился на выключение.

Я реализовал это в моем методе switchChangedValue, однако он создает неприятный цикл. Когда происходит сбой, я устанавливаю UISwitch на предыдущую настройку, но он, в свою очередь, снова вызывает метод switchChangedValue, который завершается ошибкой и т. Д.

Вот часть моего метода switchChangedValue, любые идеи приветствуются.

//Check if its a valid response from the XSI server
if ([bs getHTTPResponseCode] >= 200 && [bs getHTTPResponseCode] < 300) {
    //This is the successful case       
}
else
{

    // I throw an alert here            

    //Id really like to change the UISwitch back if it goes wrong but it causes a bad loop.     
        if (buttonstate == false){
        [switchbutton setOn:YES animated:YES];
                    //This invokes my switchChangedValue again 

    }
    else if (buttonstate == true){
        [switchbutton setOn:NO animated:YES];
                    //This invokes my switchChangedValue again
    } else{
        NSLog(@"Something went bad");
    }


[bs release];

1 Ответ

0 голосов
/ 30 июня 2011

Вы можете попробовать что-то вроде этого:

Объявите это в своем заголовке:

BOOL _fireAPICall;

Установите значение YES, когда инициализируется определенный класс:

- (id)init {
    if (self = [super init]) {
        ...
        _fireAPICall = YES;
        ...
    }
    return self;
}

Тогда:

if (_fireAPICall) {
    if ([bs getHTTPResponseCode] >= 200 && [bs getHTTPResponseCode] < 300) {
        // success
    } else {
        // failure
        _fireAPICall = NO;
        [switchbutton setOn:!buttonstate animated:YES];
    }
} else {
    _fireAPICall = YES;
    // handle case where switch is turned off if necessary
}

Это предполагает, что вы не выполняете вызов API, когда пользователь вручную выключает переключатель, хотя - так ли это?

Обновлено выше!

...