【问题标题】:DIsplay 'data loading' while using sendAsynchronousRequest:queue:completionHandler:使用 sendAsynchronousRequest:queue:completionHandler 时显示“数据加载”:
【发布时间】:2013-04-06 17:49:33
【问题描述】:

我正在使用这种块方法从服务器加载我的数据...

NSURLRequest *urlRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:[myString stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]]
                                            cachePolicy:NSURLRequestUseProtocolCachePolicy
                                        timeoutInterval:60.0];
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[NSURLConnection
 sendAsynchronousRequest:urlRequest
 queue:queue
 completionHandler: ^( NSURLResponse *response,
                      NSData *data,
                      NSError *error)
 {
     [[mySingleton dictionaryUserDetail] removeAllObjects];
     [[mySingleton arrayUserDetail] removeAllObjects];

     if ([data length] > 0 && error == nil) // no error and received data back
     {
         NSError* error;
         NSDictionary *myDic = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
         [mySingleton setDictionaryUserDetail:[myDic mutableCopy]];

         NSArray *myArray = [myDic objectForKey:@"searchResults"];
         [mySingleton setArrayUserDetail:[myArray mutableCopy]];

         dispatch_async(dispatch_get_main_queue(), ^{
             [self userDetailComplete];
         });
     } else if
         ([data length] == 0 && error == nil) // no error and did not receive data back
     {
         dispatch_async(dispatch_get_main_queue(), ^{
             [self serverError];
         });
     } else if
         (error != nil) // error
     {
         dispatch_async(dispatch_get_main_queue(), ^{
             [self serverError];
         });
     }
 }];

我希望能够向用户显示进度条,而不仅仅是一个微调器。如果我使用委托,我认为我可以使用 NSURLConnectionDelegate

connection:didReceiveData:

但我不知道如何使用块来执行此操作。任何人都有一些天才的见解?

【问题讨论】:

    标签: ios networking delegates nsurlconnection objective-c-blocks


    【解决方案1】:

    如果您想显示一个显示实际下载进度的进度条,那么您必须使用NSURLConnection 的基于委托的方法。 sendAsynchronousRequestsendSynchronousRequest 没有提供方法。

    【讨论】:

    • 没有办法吗?
    • @sangony:我很确定。仅当下载完成(或发生某些错误)时才调用完成块。没有调用委托方法。 - 基于委托的方法有更多的优势,例如可以取消请求。
    • 感谢马丁的澄清。
    猜你喜欢
    • 2021-08-26
    • 2021-01-31
    • 1970-01-01
    • 2011-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多