2016-05-11 6 views
1

Im, использующий signalR для отправки данных здесь, является моим кодом для отправки данных.Пользовательский интерфейс зависает перед обратным вызовом SignalR

  manager = [AFHTTPRequestOperationManager manager]; 
      manager.responseSerializer = [AFJSONResponseSerializer serializer]; 
      manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"application/json"]; 
      manager.requestSerializer = [AFJSONRequestSerializer serializer]; 
      [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 

      setUrl = [NSString stringWithFormat:@"%@%@",[UtilHelper sharedManager].WebServiceURL,@"Save"]; 
      NSDictionary *parameters = [[NSDictionary alloc]initWithObjectsAndKeys:dicArray,@"products", nil]; 

      __block NSMutableArray* json; 
      json = [[NSMutableArray alloc]init]; 
      [manager POST:setUrl parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) { 

       NSError *writeError = nil; 
       NSData *jsonData = [NSJSONSerialization dataWithJSONObject:responseObject options:NSJSONWritingPrettyPrinted error:&writeError]; 
       NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData 
                    options:NSJSONReadingMutableContainers 
                     error:&writeError]; 
       if ([[dic valueForKey:@"StatusMsg"] isEqualToString:@"Success"]) { 
        // save To S3 Bucket 
        [self sendPicture:[NSString stringWithFormat:@"%@",strProductId] : strPackageId]; 
        [[results objectAtIndex:i] setValue:[NSNumber numberWithBool:YES] forKey:@"productsync"]; 
        [[results objectAtIndex:i] setValue:[NSNumber numberWithBool:YES] forKey:@"editflag"]; 
        [context save:nil]; 

       } 
      } 
        failure:^(AFHTTPRequestOperation *operation, NSError *error) { 

        }]; 

Теперь им получать ответ SignalR в AppDelegate

[hubConnection setReceived:^(NSString *message) { 
    NSLog(@"%@",message); 

    }); 

Когда setReceived называется мой UI рукой вот мой код, который я представляю мой UIViewController, что я представить и зависание интерфейса инициализации

-(void)handlePlusOption{ 

    __weak __typeof(&*self)weakSelf = self; 

    dispatch_async(dispatch_get_main_queue(), ^{ 
     __strong __typeof(&*weakSelf)strongSelf = weakSelf; 

    strongSelf.addProductVc = [[AddProductVC alloc] initWithNibName:addProductVcIdentifier bundle:nil]; 
    strongSelf.nav = [[UINavigationController alloc] initWithRootViewController:strongSelf.addProductVc]; 
    strongSelf.nav.modalPresentationStyle = UIModalPresentationFormSheet; 
    strongSelf.nav.modalTransitionStyle=UIModalTransitionStyleCoverVertical; 
    strongSelf.nav.modalPresentationCapturesStatusBarAppearance = NO; // To hide status bar, doest work with UIModalPresentationPageSheet style 
     [self.navigationController presentViewController:strongSelf.nav animated:YES completion:NULL]; 
    }); 
} 

Почему пользовательский интерфейс работает до setReceived?

ответ

0

пытаются поставить setReceived блок кода внутри этого блока ..

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
    // time-consuming task 
    [hubConnection setReceived:^(NSString *message) { 
     NSLog(@"%@",message); 
    }]; 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     // run in main thread 
    }); 

}); 
+0

Это же я уже попробовать это, и мой пользовательский интерфейс повесить перед тем setReceived называется. – bhadresh

+0

попробуйте поместить setReceived блок в основной поток ниже .. это может работать, или вы могли бы использовать другой способ отправки данных с помощью ssjson parser lib, если вы отправляете json-данные. – vaibhav

+0

Nah, его все тот же. и я получаю ключевое значение в ответ, и мои данные не так велики, что повесить UI его всего лишь 6 пар ключ-значение. Возможно ли это, потому что серверная сторона отправляет данные? – bhadresh

Смежные вопросы