0

私のアプリケーションは VOIP テレフォニー ツールボックスです。

たとえば、発信者IDの設定を変更したい場合など、ユーザーが設定を変更するために使用できる一連のUISwitchコントロールがあります。

ユーザーが設定を変更したら、Restful API を介して Telephony プラットフォームを呼び出す必要があります。Restful 呼び出しが失敗した場合は、スイッチを以前の設定にリセットしたいと思います。たとえば、ユーザーが発信者 ID をオンにして、接続障害のために失敗した場合、スイッチをオフに戻したいと思います。

これを 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 に答える