我的应用程序是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];
答案 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调用,但是 - 是这样吗?
上面更新了!