0

スタートボタンでサーバーにデータをアップロードしている調査アプリを作成しています。停止ボタンをクリックすると、次の方法でデータのアップロードを停止する必要があります。

以下はアップロードボタンのスタートボタンです。

-(IBAction)startSyncButtonAction{
   CereniaAppDelegate *appDelegate = (CereniaAppDelegate *)[[UIApplication sharedApplication] delegate];
   for (int i=0; i<[appDelegate.coffeeArray count]; i++) {

    Coffee *coffeeObj = [appDelegate.coffeeArray objectAtIndex:i];


    int mycount=[appDelegate.coffeeArray count];
    NSLog(@"My Array count is %d",mycount);


        NSString*device_Id=coffeeObj.device_Id;
        NSString*R1=coffeeObj.R1;
        NSString*R2=coffeeObj.R2;
        NSString*R3=coffeeObj.R3;
        NSString*comment=coffeeObj.comment;
            NSString*update_date_time=coffeeObj.update_date_time;



    [appDelegate removeCoffee:coffeeObj];

    int mycount1=[appDelegate.coffeeArray count];


    NSLog(@"My Array After delete is %d",mycount1);


    NSLog(@"device_Id%@",device_Id);
    NSLog(@"R1%@",R1);
    NSLog(@"R2%@",R2);
    NSLog(@"R3%@",R3);
    NSLog(@"comment%@",comment);
    NSLog(@"update_date_time%@",update_date_time);

            NSString *post =[[NSString alloc] initWithFormat:@"device_Id=%@&R1=%@&R2=%@&R3=%@&comment=%@&update_date_time=%@",device_Id,R1,R2,R3,comment,update_date_time];

    NSLog(post);
    NSURL *url=[NSURL URLWithString:@"http://celeritas-solutions.com/pah_brd_v1/pfizersurvey/SyncSurveySTD.php"];
    NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
    NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init] ;
    [request setURL:url];
    [request setHTTPMethod:@"POST"];
    [request setValue:postLength forHTTPHeaderField:@"Content-Length"];
    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
    [request setHTTPBody:postData];



    NSError *error;
    NSURLResponse *response;
    NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
    NSString *data=[[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding];
    NSLog(@"%@",data);


     }

         }

         -(IBAction)stopButtonAction{

          }
4

1 に答える 1

0

コメントは問題を指摘しています。次のことを行う必要があります。

  • メイン スレッドで負荷の高い作業を行うことは避けてください。アプリがロックされます。
  • 重い作業が完了したら、必ずメイン スレッドで UI を更新してください。そうしないと、同期が遅くなります。

解決するには、次のいずれかを検討してください。

1. グランド セントラル ディスパッチを使用します。

グランド セントラル ディスパッチを使用すると、スレッドを直接処理しなくても、スレッド化されたアプリケーションを簡単に作成できます。以下をせよ:

dispatch_queue_t taskQ = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(taskQ, ^
{
    NSURL *url=[NSURL URLWithString:@"http://celeritas-solutions.com/pah_brd_v1/pfizersurvey/SyncSurveySTD.php"];
   NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
    NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init] ;
    [request setURL:url];
    [request setHTTPMethod:@"POST"];
    [request setValue:postLength forHTTPHeaderField:@"Content-Length"];
    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
    [request setHTTPBody:postData];

    NSError *error;
    NSURLResponse *response;
    NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];

//Now update back on the main thread
dispatch_async(dispatch_get_main_queue(), ^
{
    //Now update the view with your data, to show the outcome of the POST
});
    });

dispatch_release(taskQ);

2. これを行うネットワーク ライブラリを使用します。

  • AFネットワーキングは非常に人気があります
  • 私は NSURLConnection の単なる薄い層である LRResty が好きです - 基本的に私が上で書いたことを行い、他のことを最小限に抑えます。

3. [NSURLConnection +sendAsynchronousRequest:queue:completionHandler:] を使用します。

4. 操作キューを使用します。

5. スレッドを使用します。

于 2013-01-28T08:44:44.290 に答える