NSURLConnection下线主线程

时间:2014-03-17 03:02:12

标签: ios objective-c multithreading asynchronous

说明: 在过去的几周里,我基本上从Stackoverflow学到了Obj-C和Cocoa Touch,所以很棒的社区,bravo。

唉,我遇到了一个问题,我无法找到答案,也不知道如何使用谷歌。

我正在创建一个100%与API服务接口的应用程序。这是过程:

  1. 应用启动 - >检索令牌
  2. 后续请求 - > HTTP标头令牌
  3. 我的第一个视图控制器是一个加载图标,同时发生同步请求。

    我希望将来能够制作异步请求,因为当这些请求发生时,我的UI会被阻止。

    我的PHP背景导致我设置了这样的文件,所以如果这不正确,请告诉我。

    • APIConnect.h / .m - >保存我的所有API方法 -(NSDictionary *)APIcall:(NSString *)api postData:(NSDictionary *)postData
    • TableViewController.h / .m - >表基于从上述方法加载的数据。

    选择行时,它会在UI中向前移动并检索该项的详细信息(另一个API调用)。

    向前推进时,主线程被阻止了。

    因此我尝试设置异步方法 -(NSDictionary *)asyncAPIcall:(NSString *)api postData:(NSDictionary *)postData

    APIConnect.m(缩写):

    -(NSDictionary *)asyncAPIcall:(NSString *)api postData:(NSDictionary *)postData
    {
     [NSURLConnection sendAsynchronousRequest:request
                                       queue:queue
                           completionHandler:
     ^(NSURLResponse *response, NSData *data, NSError *error){
         if ([data length] > 0 && error == nil)
             [self returnedData:data];
         else
             [self downloadError:error];
    
     }];
    }
    
    
    -(void)returnedData:(NSData*)data
    {
        NSMutableDictionary *returnData = [[NSMutableDictionary alloc] init];
    
        [returnData setDictionary:[NSJSONSerialization JSONObjectWithData:data
                                                              options:0
                                                                error:nil]];
    
        NSLog(@"Returned Data %@", returnData);
        [self setReturnURLData:returnData];
    }
    

    我真的不知道怎么问我的问题,所以也许你可以帮助我...但理论上我想:

    • 在APIConnect.m
    • 中发出异步请求
    • 完成异步后,它会将数据返回给TableViewController.m
    • 一旦TableViewController接收到数据,它将运行它的处理并运行[self.tableView reloadData];
    • 同时,一个活动指示器或其他东西可见,表明它正在努力获取某些东西

    任何有关Google内容的指导都会非常有用。

0 个答案:

没有答案