如何在工作进行之前实现装载程序?

时间:2014-07-05 07:51:05

标签: objective-c json ios7 xcode5 loader

我是ios Development的新手。我需要调用api从web获取信息,在控制器2中我正在调用我的api来显示来自web的信息和来自控制器1的按钮动作我正在调用控制器2.我在控制器2的视图中实现了自定义加载器处理时间,但我不知道为什么从控制器1去控制器2需要这么多时间,我不知道如何减少处理时间或者你能告诉我可以在按钮动作的处理时间内实现加载程序。需要帮助。

调用api -

    NSURLRequest *theRequest=[NSURLRequest requestWithURL:getAllClassifications                                                   cachePolicy:NSURLRequestUseProtocolCachePolicy
                             timeoutInterval:60.0];
    NSData *returnData = [NSURLConnection sendSynchronousRequest:theRequest      returningResponse:nil error:nil];
    // NSLog(@"return id =%@",returnData);

    NSError* error;
    NSDictionary* json = [NSJSONSerialization
                          JSONObjectWithData:returnData

                          options:kNilOptions
                          error:&error];
    //NSDictionary *location = [json objectForKey:@"npidata"];

    NSArray *latestLoans = [json objectForKey:@"taxonomy"];
    recipes = [latestLoans valueForKey:@"classification"];


    firstname = [latestLoans valueForKey:@"classification"];

实现自定义加载器 -

NSURL *url = [[NSBundle mainBundle] URLForResource:@"loadingg" withExtension:@"gif"];
self.loader.image = [UIImage animatedImageWithAnimatedGIFData:[NSData     dataWithContentsOfURL:url]];


float progress = 0.0f;
while (progress < 1.0f) {

    progress += 0.01f;
    HUD.progress = progress;
    usleep(50000);





}

[NSTimer scheduledTimerWithTimeInterval:progress target:self selector:@selector(abcd) userInfo:nil repeats:NO];

1 个答案:

答案 0 :(得分:0)

@jrturton似乎做对了,你正在做NSURLConnection sendSynchronousRequest,它会在返回所有数据之前停止。您会发现系统使用异步请求更具响应性。

NSURLConnection *c = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self startImmediately: true]; 

然后在数据准备好之前立即返回到您的代码。之后,它将回调您必须定义的委托方法,为您提供数据。在http://codewithchris.com/tutorial-how-to-use-ios-nsurlconnection-by-example/处有一个简单的教程,the apple documentation处有大量详细信息