检索发布请求的结果后设置图像需要17秒

时间:2015-04-01 17:19:32

标签: ios uiimageview objective-c-blocks nsurlsession

我正在向服务器发送一个返回字符串的帖子请求,该字符串表示如果用户存在或不具有该昵称,则帖子通知无瑕疵,并在完成处理程序内部打印出1s以下的返回结果,但是根据返回的结果设置图像还需要17到20个......

以下是我正在使用的代码:

- (void)textFieldDidBeginEditing:(UITextField *)textField{
    // for each textfield selected checkl previous text field formating

    if (textField == registerEmailAddressTextField)
    {

        //check if nickname is at least 6 charactes

        if (registerNicknameTextField.text.length < 6) {
            NSLog(@"EMIAL TEXT FIELD");
            [registerNicknameCheckmarkLabel setImage:[UIImage imageNamed:@"wrong_checkmark.png"]];

        }else{
            NSLog(@"checking nickname");
            //check if nickname exists or not

            NSURL *url = [NSURL URLWithString:@"myURL"];


            //Create the session with custom configuration
            NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];

            NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfiguration];


            NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
            request.HTTPMethod = @"POST";



            NSError *error = nil;
            NSString* str = [NSString stringWithFormat:@"username=%@", registerNicknameTextField.text];
            NSData* jsonData = [str dataUsingEncoding:NSUTF8StringEncoding];

            [request setValue:[NSString stringWithFormat:@"%d", (int)registerNicknameTextField.text.length] forHTTPHeaderField:@"Content-Length"];
            if (!error) {

                NSURLSessionUploadTask *uploadTask = [session uploadTaskWithRequest:request
                                                                           fromData:jsonData completionHandler:^(NSData *data,NSURLResponse *response,NSError *error) {


                                                                               NSString *responseString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                                                                               NSString* result2 = [responseString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
                                                                               NSString *secondString = [result2 stringByReplacingOccurrencesOfString:@" " withString:@""];
                                                                               if ([secondString isEqualToString:@"exist"]) {
                                                                                   NSLog(@"nickname allready exists");
                                                                                   [registerNicknameCheckmarkLabel setImage:[UIImage imageNamed:@"wrong_checkmark.png"]];
                                                                               }else{
                                                                                   [registerNicknameCheckmarkLabel setImage:[UIImage imageNamed:@"correct_checkmark.png"]];
                                                                                   NSLog(@"nickname doesn't exists");
                                                                               }
                                                                           }];


                [uploadTask resume];
            }

        }




    }
}

我甚至尝试使用这些代码强行刷新屏幕没有成功:

dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW,
                                        (int64_t)(0.005 * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void) {
    [self.view setNeedsDisplay];
});

1 个答案:

答案 0 :(得分:0)

正如@dan所建议的那样,我把所有东西放在主队列上:

dispatch_async(dispatch_get_main_queue(), ^{                                                                                                     
if ([secondString isEqualToString:@"exist"]) {                                                                                               
[registerNicknameCheckmarkLabel setImage:[UIImage 
imageNamed:@"wrong_checkmark.png"]];                                                                                           
}else{                                                                                               
[registerNicknameCheckmarkLabel setImage:[UIImage 
imageNamed:@"correct_checkmark.png"]];                                                                                           
}                                                                        
});