0

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

我有一系列 UISwitch 控件,用户可以使用它们来更改他们的设置,例如,如果他们想改变他们的呼叫者 ID 设置。

当用户更改设置时,我需要通过其 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];
4

1 回答 1

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

以上更新!

于 2011-06-30T02:27:56.233 回答