3

すべてのサーバー要求を処理するメソッドに到達可能性関数を実装しました。NSLogsを見ると、関数が完全に機能していることがわかります。ただし、メソッド内に「一時停止」が発生することはありません。つまり、プログラムをクラッシュさせずにUIAlertViewを使用することはできません。

私はこれを完全に間違った方法で行っているかもしれませんが、他に何も見つかりません...

誰かが何らかの方法で表示する通知を取得する方法についてのアイデアを持っていますか?

前もって感謝します

コード:

-(id) getJson:(NSString *)stringurl{
Reachability * reach = [Reachability reachabilityWithHostname:@"www.google.com"];

NSLog(@"reached %d", reach.isReachable);

if (reach.isReachable == NO) {

   UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Passwords don't match."
     message:@"The passwords did not match. Please try again."
     delegate:nil
     cancelButtonTitle:@"OK"
     otherButtonTitles:nil];
     [alert show];

}else{
    id x =[self getJsonFromHttp:stringurl];
    return x;
}
return nil;
}
4

1 に答える 1

2

ディスカッションをチャットに移動した後、UIAlertViewがバックグラウンドスレッドから呼び出されていることがわかりました。バックグラウンドスレッドでUI(ユーザーインターフェイス)を更新することに関連することは絶対にしないでください。UIAlertViewは、小さなポップアップダイアログを追加してUIを更新するため、メインスレッドで実行する必要があります。次の変更を行って修正します。

// (1) Create a new method in your .m/.h and move your UIAlertView code to it
-(void)showMyAlert{ 

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Passwords don't match." 
                           message:@"The passwords did not match. Please try again." 
                           delegate:nil 
                               cancelButtonTitle:@"OK" 
                           otherButtonTitles:nil]; 
    [alert show]; 

}

// (2) In -(id)getJson replace your original UI-related code with a call to your new method
[self performSelectorOnMainThread:@selector(showMyAlert)
                             withObject:nil
                          waitUntilDone:YES];
于 2013-01-02T19:35:57.550 に答える