【问题标题】:Asynchronous Asihttprequest异步 Asihttprequest
【发布时间】:2014-04-07 08:26:59
【问题描述】:

我想异步显示数据,它工作成功,我在日志消息中快速得到响应,但是隐藏微调器需要太多时间,而且我无法快速将数据显示到我的 tableview 中,我能知道什么是原因是什么?

-(void) clubsDetail:(int)catID
{

    NSString *link = [NSString stringWithFormat:@"%@",KWSURLVenu];
    NSLog(@"%@",link);

    ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:link]];
    [request setRequestMethod:@"POST"];

    [request setPostValue:[NSString stringWithFormat:@"%d",  catID] forKey:@"cat_id"];
    NSLog(@"%d",catID);
    [request setCompletionBlock:^{
        NSString *jsonString = [request responseString];
        NSLog(@"response %@",jsonString);
        NSArray *dataArray = (NSArray *) [jsonString JSONValue];
        NSDictionary * returnDicto = nil;
        NSLog(@"response after parsin");
//        NSDictionary * returnDict = [returnDicto objectForKey:@"club_info"] ;

        [slideDetail_dataArray removeAllObjects];
//        if ([returnDict objectForKey:@"club_info"]) {


        for(returnDicto in dataArray)
        {
            PostClubDC *postDC = [[PostClubDC alloc] init];
            NSDictionary * returnDict = [returnDicto objectForKey:@"club_info"] ;
            postDC.postID = [[returnDict objectForKey:@"Id"]integerValue];
            postDC.postCatID = [[returnDict objectForKey:@"cat_id"]integerValue];
            postDC.postName = [returnDict objectForKey:@"name"];
            postDC.postHeadLine = [returnDict objectForKey:@"headline"];
            postDC.postImage = [returnDict objectForKey:@"image"];
            postDC.postLat = [returnDict objectForKey:@"long"];
            postDC.postAddress = [returnDict objectForKey:@"address"];
            postDC.postSummary = [returnDict objectForKey:@"summary"];
            postDC.postStat = [returnDict objectForKey:@"stat"];
            postDC.postUS = [returnDict objectForKey:@"us"];
            NSDictionary * returnDictic = [returnDicto objectForKey:@"club_rating"];
            postDC.postGoodRate = [returnDictic objectForKey:@"good"];
            postDC.postGreatRate = [returnDictic objectForKey:@"great"];
            [slideDetail_dataArray addObject:postDC];
        }

        // hide spinner
        [[myActivityIndicator currentIndicator]hide];
        [tbl_slideDetail reloadData];
    }];
//    [request setFailedBlock:^{
//        NSError *error = [request error];
//    }];
    [request startAsynchronous];
    // show spinner

    [[myActivityIndicator currentIndicator] displayActivity:@"Loading"];
}

【问题讨论】:

  • 请注意,ASIHtppRequest 不再维护,并且存在一些已知错误。
  • 请告诉我该怎么办?
  • 我似乎 for 循环需要很长时间才能完成迭代。检查'dataArray'计数它必须是一个大数字。

标签: ios iphone asynchronous asihttprequest


【解决方案1】:

我认为您的问题是您试图从主线程以外的线程更改 UI。尝试更改此代码以查看是否有帮助:

    // hide spinner
    dispatch_async(dispatch_get_main_queue(), ^{
        // hide spinner on main thread
        [[myActivityIndicator currentIndicator]hide];
        [tbl_slideDetail reloadData];
    });

【讨论】:

  • 好吧,当您发出异步请求时,响应会在单独的线程 (completionBlock) 上执行。您不能更改与主线程以外的线程相关的任何 UI。所以我们要做的是告诉应用程序在主线程上运行这段代码。这是通过使用dispatch_async(dispatch_get_main_queue(), ^{ ... }); 完成的。
【解决方案2】:

既然您问了在 cmets 中应该做什么,请切换到 AFNetworking 2.0。 AFN 使用块而不是委托方法,一旦您习惯了它的工作方式,它就会比 ASI 更容易使用。

Here is a link 到一个(非常)旧的SO question,它有一个如何使用 AFN 的示例(这在 2.0 版中略有改变)。大量在线更新示例 (Ray Wenderlich)

【讨论】:

  • 那是当前版本。与1相比有一个重大变化。?到 2.0。从那以后发生了一些小变化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多