在iOS 8/9中NSURLRequest期间更新等待视图和UI的正确方法是什么?

时间:2016-05-08 08:18:18

标签: ios multithreading nsurlrequest

我想知道在iOS 8/9中NSURLRequest期间更新等待视图和用户界面的最佳模式。

在我的模型中,NSURLRequest在单例中处理,并通过委托与调用者类通信。

Personaly我在主线程中显示了一个Wait View,我在我的单例中调用dataTaskWithRequest:request,最后我在completitionHandler中更新了delegate(一个viewController)。问题是,有些时候Wait View会在几秒钟后显示,而某些客户端(仅限iOS9)报告随机崩溃调用dataTaskWithRequest。

 [APP_DELEGATE  startWaitWithText:@"Please Wait"];

     NSURLSession *session = [NSURLSession sharedSession];
        [[session dataTaskWithRequest:request
                completionHandler:^(NSData *data,
                                    NSURLResponse *response,
                                    NSError *error) {

                    dispatch_sync(dispatch_get_main_queue(), ^{
                         [APP_DELEGATE stopWait];
                         [delegate updateUI:data,response,error];
                    });

              }] resume];

编辑。我的等待观点

#define TAG_WINDOW_WAIT 10001
- (void) startWaitWithText:(NSString*) text
{
    [self stopWaitModal];

    dispatch_async(dispatch_get_main_queue(), ^{
        backgrView =[[self window] viewWithTag:TAG_WINDOW_WAIT];
        if(!backgrView)
        {
            backgrView= [[UIView alloc] initWithFrame:CGRectMake(0, 0, [[UIScreen mainScreen] bounds].size.width, [[UIScreen mainScreen] bounds].size.height)];
            [[self window] addSubview:backgrView];
        }

        backgrView.tag = TAG_WINDOW_WAIT;
        [backgrView becomeFirstResponder];
        [[self window] bringSubviewToFront:backgrView];

    });
 }

0 个答案:

没有答案