NSURLConnection не вызывает завершение через несколько представлений

Ранее сегодня я задал следующий вопрос:Блокировка iOS останавливается при нажатии просмотра

Операция, которую я упомянул (OP1) на самом деле "http get " на мой сервер, используя NSURLConnection.

После еще большего расследования я обнаружил, что блок нет на самом делеумереть", На самом деле происходит то, что запрос на самом деле отправляется (серверная сторона регистрирует его), даже после того, как представление было отправлено (проверено с помощью [NSThread sleep: 10]). Сервер отвечает, но тогда НИЧЕГО не происходит на стороне приложения, если view2 был нажат! почти как если бы соединение потеряло своего делегата! Еще одна возможность, которую я смотрю на это "тот факт, что NSURLConnection находится наrsMainLoop связанные с?"

Кто-нибудь может помочь?

Пожалуйста незабыть это:

0. Все работает нормально, пока view2 не выдвигается до завершения операции.

1. Запрос отправлен асинхронно

2. Я устанавливаю делегата, и он работает, пока представление не изменяется

3. view1 начинает операцию с помощьюссылка на одноэлементный объект " имущество "OP1Completed»

4. view2 проверяет завершение OP1 через свойство нассылка на одноэлементный объект "

5. view2 получает "результат" зайдя вsingleton.OP1Result» имущество

Изменить 1:

Хорошо, давайте немного кода. Сначала вот соответствующий код моего синглтона (с именем "Взаимодействие»):

-(void)loadAllContextsForUser:(NSString *)username{
userNameAux = username;
_loadingContextsCompleted = NO;
if (contextsLoaderQueue == NULL) {
    contextsLoaderQueue = dispatch_queue_create("contextsLoaderQueue", NULL);
}

dispatch_async(contextsLoaderQueue, ^{
    NSLog(@"Loading all contexts block started");
    [self requestConnectivity];

    dispatch_async(dispatch_get_main_queue(), ^{
        [Util Get:[NSString stringWithFormat:@"%@/userContext?username=%@", Util.azureBaseUrl, [username stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]
     successBlock:^(NSData *data, id jsonData){
         NSLog(@"Loading all contexts block succeeded");
         if([userNameAux isEqualToString:username]){
             _allContextsForCurrentUser = [[NSSet alloc]initWithArray: jsonData];
         }
     } errorBlock:^(NSError *error){
         NSLog(@"%@",error);
     } completeBlock:^{
         NSLog(@"load all contexts for user async block completed.");
         _loadingContextsCompleted = YES;
         [self releaseConnectivity];
     }];
    });

    while (!_loadingContextsCompleted) {
        NSLog(@"loading all contexts block waiting.");
        [NSThread sleepForTimeInterval:.5];
    }
});
NSLog(@"Load All Contexts Dispatched. It should start at any moment if it not already.");
}

А вот класс Util, который фактически обрабатывает запрос / ответ

-(id)initGet:(NSString *)resourceURL successBlock:(successBlock_t)successBlock errorBlock:(errorBlock_t)errorBlock completeBlock:(completeBlock_t)completeBlock;{
if(self=[super init]){
    _data=[[NSMutableData alloc]init];
}

_successBlock = [successBlock copy];
_completeBlock = [completeBlock copy];
_errorBlock = [errorBlock copy];

NSURL *url = [NSURL URLWithString:resourceURL];
NSMutableURLRequest *request = [NSURLRequest requestWithURL:url];
[[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];
//[_conn scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
//[_conn start];
NSLog(@"Request Started.");

return self;
}

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    [_data setLength:0];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    [_data appendData:data];
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
id jsonObjects = [NSJSONSerialization JSONObjectWithData:_data options:NSJSONReadingMutableContainers error:nil];

id key = [[jsonObjects allKeys] objectAtIndex:0];
id jsonResult = [jsonObjects objectForKey:key];

_successBlock(_data, jsonResult);
_completeBlock();
}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
_errorBlock(error);
_completeBlock();
}

И, наконец, вот соответствующая часть VC1 (толкая в VC2)

- (IBAction)loginClicked {
NSLog(@"login clicked. Preparing to exibit next view");

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
AuthenticationViewController *viewController = (AuthenticationViewController *)[storyboard instantiateViewControllerWithIdentifier:@"ContextSelectionView"];

NSLog(@"Preparation completed. pushing view now");

[self presentViewController:viewController animated:YES completion:nil];
}

Ответы на вопрос(5)

Ваш ответ на вопрос