0

私はアプリケーションに取り組んでおり、ログインの進行中に activityindicator を使用する必要があります。以下のコードで activityindicator のコードを使用する必要がある場所がわかりません:-

- (IBAction)Login:(id)sender
{
    NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
    NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:nil];

    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:BaseUrl@"login"]];

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url
                                                           cachePolicy:NSURLRequestUseProtocolCachePolicy
                                                       timeoutInterval:60.0];

    [request addValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];


    [request addValue:@"*/*" forHTTPHeaderField:@"Accept"];

    [request setHTTPMethod:@"POST"];

    NSString *mapData = [NSString stringWithFormat:@"userName=g&userPassword=123456&api_key=ZWZ&api_password=1" ];

    NSData *postData = [mapData dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];

    [request setHTTPBody:postData];


    NSURLSessionDataTask *postDataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {

        if(error == nil)
        {

            NSString * text = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
            NSLog(@"text= %@",text);

            NSError *error = nil;
            NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];

            if(error!=nil)
            {
                NSLog(@"error = %@",error);

            }

            dispatch_async(dispatch_get_main_queue(), ^{
                [self checkUserSuccessfulLogin:json];
            });
        }
        else{

            NSLog(@"Error : %@",error.description);

        }


    }];


    [postDataTask resume];




}

ログイン後、他のページに移動するのに時間がかかります。私を助けてください。

4

5 に答える 5

0
 - (IBAction)Login:(id)sender

 {
//show or add youar activity indicator here


NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:nil];

NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:BaseUrl@"login"]];

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url
                                                       cachePolicy:NSURLRequestUseProtocolCachePolicy
                                                   timeoutInterval:60.0];

[request addValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];


[request addValue:@"*/*" forHTTPHeaderField:@"Accept"];

[request setHTTPMethod:@"POST"];

NSString *mapData = [NSString stringWithFormat:@"userName=g&userPassword=123456&api_key=ZWZ&api_password=1" ];

NSData *postData = [mapData dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];

[request setHTTPBody:postData];


NSURLSessionDataTask *postDataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {

    //Hide or remove your activity indicator here


    if(error == nil)
    {

        NSString * text = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
        NSLog(@"text= %@",text);

        NSError *error = nil;
        NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];

        if(error!=nil)
        {
            NSLog(@"error = %@",error);

        }

        dispatch_async(dispatch_get_main_queue(), ^{
            [self checkUserSuccessfulLogin:json];
        });
    }
    else{

        NSLog(@"Error : %@",error.description);

    }


}];


[postDataTask resume];




}

コードにコメントを追加すると、ユーザーがボタンをタップするとメソッドの開始時にアクティビティインジケーターが表示され、サーバーからの応答後に完了ハンドラーが呼び出されるため、完了ハンドラーから非表示になります。

これが役立つことを願っています:)

于 2016-05-27T07:21:40.443 に答える
0

アカシュ、

MBProgressHUDサードパーティフレームワークを利用できます。アクティビティインジケーターのコードを画面に追加する必要はありません。すべて(ホイールを再発明する必要はありません)ここにリンクがあります:) https://github.com/jdg/MBProgressHUD

ポッドの依存関係を追加するか、プロジェクトにファイルを追加してください。

ファイルをインポートします。

#import <MBProgressHUD/MBProgressHUD.h>

    - (IBAction)Login:(id)sender
    {
        //add the MBProgressHud here before you make the webservice call
        MBProgressHUD *hud = [[MBProgressHUD alloc] initWithView:self.navigationController.view];
        hud.labelText = NSLocalizedString(@"Login in progress", nil);

        [self.navigationController.view addSubview:self.HUD];

        NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
        NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:nil];

        NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:BaseUrl@"login"]];

        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url
                                                               cachePolicy:NSURLRequestUseProtocolCachePolicy
                                                           timeoutInterval:60.0];

        [request addValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];


        [request addValue:@"*/*" forHTTPHeaderField:@"Accept"];

        [request setHTTPMethod:@"POST"];

        NSString *mapData = [NSString stringWithFormat:@"userName=g&userPassword=123456&api_key=ZWZ&api_password=1" ];

        NSData *postData = [mapData dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];

        [request setHTTPBody:postData];


        NSURLSessionDataTask *postDataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
            dispatch_async(dispatch_get_main_queue(), ^{
            //finally hide it, whether its sucess or failure just remove it 
            [MBProgressHUD hideHUDForView:self.navigationController.view animated:YES];
            });
            if(error == nil)
            {

                NSString * text = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
                NSLog(@"text= %@",text);

                NSError *error = nil;
                NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];

                if(error!=nil)
                {
                    NSLog(@"error = %@",error);

                }

                dispatch_async(dispatch_get_main_queue(), ^{
                    [self checkUserSuccessfulLogin:json];
                });
            }
            else{

                NSLog(@"Error : %@",error.description);

            }


        }];


        [postDataTask resume];
}
于 2016-05-27T06:59:50.637 に答える
0

アクティビティ インジケーターのコードを更新しました。

.h ファイルでアクティビティ インジケーターのアウトレットを作成するだけです。

@property (weak,nonatomic) UIActivityIndicatorView *indicator;

次に、以下のコードを .m ファイルの viewDidLoad() に記述します。

self.indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
self.indicator.center = CGPointMake([[UIScreen mainScreen]bounds].size.width/2, [[UIScreen mainScreen]bounds].size.height/2);

以下は、Json 解析のコードです。

- (IBAction)Login:(id)sender
{

    [self.indicator startAnimating];//The ActivityIndicator Starts Animating Here

    NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
    NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:nil];

    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:BaseUrl@"login"]];

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url
                                                       cachePolicy:NSURLRequestUseProtocolCachePolicy
                                                   timeoutInterval:60.0];

    [request addValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];


    [request addValue:@"*/*" forHTTPHeaderField:@"Accept"];

    [request setHTTPMethod:@"POST"];

    NSString *mapData = [NSString stringWithFormat:@"userName=g&userPassword=123456&api_key=ZWZ&api_password=1" ];

    NSData *postData = [mapData dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];

    [request setHTTPBody:postData];


    NSURLSessionDataTask *postDataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {

    if(error == nil)
    {
        dispatch_async(dispatch_get_main_queue(), ^{

             [self.indicator stopAnimating];//The ActivityIndicator Stops Animating when Response Arrives

             NSString * text = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
             NSLog(@"text= %@",text);

             NSError *error = nil;
             NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];

             [self checkUserSuccessfulLogin:json];
        });
    }
    else
    {
        dispatch_async(dispatch_get_main_queue(), ^{

             [self.indicator stopAnimating];
        });
        NSLog(@"Error : %@",error.description);
    }
 }];

 [postDataTask resume];

}
于 2016-05-27T07:04:48.693 に答える