UISwitch调用Restful API调用失败,希望恢复UISwitch值

时间:2011-06-30 02:18:11

标签: iphone uiswitch

我的应用程序是VOIP电话工具箱。

我有一系列UISwitch控件,用户可以使用这些控件来更改设置,例如,如果他们想要更改其来电显示设置。

当用户更改设置时,我需要通过其Restful API调用Telephony平台。如果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 :(得分:0)

您可以尝试这样的事情:

在标题中声明:

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调用,但是 - 是这样吗?

上面更新了!