試行中に待機ページを表示するログイン ページを作成しようとしています。メインスレッドでUIActivityIndicatorView
実行され、接続を行う別のスレッドがあります。コメントを外すとコードは正常に動作しますNSLog
が、コメントアウトすると実行され続けます。ないときに while ループが存在しない理由を誰かに説明できますNSLog
か? 少し複雑です。コマンドを準備し、正常に接続されたwebsocket
場合にのみコマンドを起動するコントロール クラスがあります。websocket
アクション フローは次のようになります。
LoginButton
クリック -> rootView
通話[_spinner startAnimating];
-> 接続試行 -> 接続websocket
に成功したらログイン コマンドを送信します。
rootView
スピナーをアニメーション化し、応答を待つ必要があります。
[_spinner startAnimating];
[NSThread detachNewThreadSelector:@selector(attampingWS) toTarget:self withObject:nil];
- (void) attampingWS {
while ([connection isAttamptingWS] && ![connection isConnectedToWebSocket]) {
/** waiting until it's done **/
// NSLog(@"?");
}
if ([connection isConnectedToWebSocket]) {
[self proceedLogin];
[_spinner performSelectorOnMainThread:@selector(stopAnimating) withObject:nil waitUntilDone:NO];
}
}
接続クラス:
@property(nonatomic) NSTimer *attampConnectionTimeOut;
@property(nonatomic) NSTimer *attampConnection;
@property BOOL isConnectedToWebSocket;
- (BOOL) isAttamptingWS {
return [_attampConnection isValid];
}
- (BOOL) isWaitingForResponse {
return [_waitingForResponse isValid];
}
/** this method is redirected from websocket by using delegation **/
- (void)dbConnectionDidConnected:(websocket *)connection {
[self _terminateAttamptingConnection];
[self setIsConnectedToWebSocket:TRUE];
}