Правильный подход для сохранения сеансов пользователей

Я разрабатываю приложение, которое использует внешний API и требует аутентификации через oauth2. В ответе от api я получаю маркер доступа, маркер обновления и время истечения срока действия маркера. Все просто прекрасно, пока время не истекает. До сих пор перед отправкой запроса я проверяю, действителен ли маркер доступа:

if ([[AppCredentials sharedCredentials]tokenIsValid]) {
    BackEnd *backendPUT = [[BackEnd alloc]init];
    [backendPUT setDelegate:self];
    [backendPUT updateMenuInDiary:menuDietyDoUpdate forDate:[[DziennikDietaModel sharedDziennikDietaModel]getwybranaDate] mealID:[menuDietyDoUpdate objectForKey:@"id"]];
    monitor = [[UICustomLoadingMonitor alloc]initWithDefaultOptionsInView:[self view]];
    [monitor start];
}else{
    [[AppCredentials sharedCredentials] getAppTokenFromRefreshedToken];
}

после завершения getAppTokenFromRefreshedToken вызывается метод userTokenDownloaded с помощью делегата.
Вопрос в том, как я могу вернуться к тому определенному коду, который не может быть выполнен в первой части инструкции if? Все асинхронно, поэтому у меня проблема.

В моем контроллере представления есть несколько методов, которые отправляют различные запросы к api, и мне нужно дифференцировать, какой из них должен быть вызван снова.

Каков был бы правильный подход к этому? закрытие ?

1 ответ

  1. ОК. решил его с блоками 🙂 в случае, если кто-то искал ответ, который, как я сделал это:

     BackEnd *backEnd = [[BackEnd alloc]init];
     [backEnd setDelegate:self];
     if ([[AppCredentials sharedCredentials]tokenIsValid]) {
             NSLog(@"TOKEN VALID NO BLOCKS");
             [backEnd updateMenuInDiary:menuDietyDoUpdate];
     }else{
            NSLog(@"USING BLOCKS");
            [backEnd getAppTokenFromRefreshToken:refreshedToken withCompletionBlock:^{
                NSLog(@"ponowna proba z bloku");
                [backEnd updateMenuInDiary:menuDietyDoUpdate];
           }];
    }
    

    отлично работает 🙂