0

NSURL 経由で自分のサイトにアクセスする方法があります。これは非常にうまく機能しますが、Web 通話の処理中に表示されるアクティビティ インジケーターが必要です。

私の問題は、NSURL 呼び出しが終了するまでアクティビティ インジケーターが表示されないことです。アクティビティ インジケーターをメソッドの一番上に表示させる 2 ビットのコードを含めてみました (以下を参照してください)。UIが更新されたときに何か関係があると確信していますが、これを処理する方法がわかりません。私が望むのは、アクティビティ インジケーターがアニメーションを開始し、loadingImageView がすぐに表示されることだけです。どんな助けでも素晴らしいでしょう。ありがとうございました!

- (IBAction)buttonPress:(id)sender {    

//ACTIVITY INDICATOR STARTS WITH THESE TWO LINES
loadingImageView.hidden = false;
[activityIndicator startAnimating];

NSString *c = [view.text stringByReplacingOccurrencesOfString:@" " withString:@"%20"];
NSString *b = [[NSUserDefaults standardUserDefaults] stringForKey:@"b"];
NSString *a = [[NSUserDefaults standardUserDefaults] stringForKey:@"a"];

NSString *strURL = [NSString stringWithFormat:@"http://www.website.com/page.php?
a=%@&b=%@&c=%@",a, b, c];

NSData *dataURL = [NSData dataWithContentsOfURL:[NSURL URLWithString:strURL]];

NSString *strResult = [[NSString alloc] initWithData:dataURL 
encoding:NSUTF8StringEncoding];

NSLog (@"%@", strResult);

[[NSUserDefaults standardUserDefaults] setObject:@"true" forKey:@"newKey"];
[[NSUserDefaults standardUserDefaults] synchronize];

[self dismissViewControllerAnimated:YES completion:nil];

}
4

3 に答える 3

1

コードごとに次のようにバックグラウンドで URL を呼び出すために、Grand Central Dispatch (GCD)を使用することもできます。

  loadingImageView.hidden = false;
  [activityIndicator startAnimating];

__Block NSString *c = [view.text stringByReplacingOccurrencesOfString:@" " withString:@"%20"];
__Block NSString *b = [[NSUserDefaults standardUserDefaults] stringForKey:@"b"];
__Block NSString *a = [[NSUserDefaults standardUserDefaults] stringForKey:@"a"];

 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

         NSString *strURL = [NSString stringWithFormat:@"http://www.website.com/page.php?a=%@&b=%@&c=%@",a, b, c];
         NSData *dataURL = [NSData dataWithContentsOfURL:[NSURL URLWithString:strURL]];
         NSString *strResult = [[NSString alloc] initWithData:dataURL encoding:NSUTF8StringEncoding];
         NSLog (@"%@", strResult);

        [[NSUserDefaults standardUserDefaults] setObject:@"true" forKey:@"newKey"];
        [[NSUserDefaults standardUserDefaults] synchronize];

            dispatch_async(dispatch_get_main_queue(), ^{
               [self dismissViewControllerAnimated:YES completion:nil];
            });
        });
于 2013-08-09T07:21:44.980 に答える