0

저는 아키텍처 문제가 있습니다.
작업을 수행하기 전에 내 앱은 사용자가 로그인했는지 확인해야합니다.코코아에서 비동기 프로세스 간의 종속성을 추가하는 방법

  1. 사용자가 기록됩니다 : 여기에 3 가지 시나리오가
  2. 사용자가 로그인하지 않은 아무 문제가 있지만
  3. 사용자가 로그인하지 않은
  4. , 사용자 이름과 비밀번호가 저장되지 않습니다 저장 I는 사용자 이름과 비밀번호가 있고 내가 필요 로그인 양식을 표시하십시오.

사용자가 로그인 할 때까지 현재 작업을 일시 중단하고 나중에 중지 한 위치에서 다시 시작하십시오.
실용적인 예 : 사용자가 오디오 스트림 콘텐츠를 누르지 만이 콘텐츠는 로그인해야합니다. 내가하고 싶은 : 로그인이 성공적으로 완료 오디오 콘텐츠

나는대로 NSBlockOperation를 사용하는 생각을 시작하는 경우

  1. 는 로그인 양식
  2. 프로세스 비동기 로그인 호출
  3. 보기 두 작업 사이의 래퍼 및 그들 사이의 종속성을 추가하지만 로그인 호출은 로그인 연결을 생성하는 AFNetworking 관리자에게 전달되는 완료 블록을 받아들이는 메서드입니다. 따라서, 그와 같은 종속성을 만들 경우에도 :

    NSBlockOperation * operation1 = [NSBlockOperation blockOperationWithBlock:^{ 
         [NetworkController loginUser:^{ 
          NSLog(@"USerLogged"); 
         }] 
        }]; 
    
        NSBlockOperation * operation2 = [NSBlockOperation blockOperationWithBlock:^{ 
         [weakSelf.player play]; 
        }]; 
        [operation2 addDependency:operation1]; 
        [self.opQueue addOperations:@[operation1,operation2] waitUntilFinished:NO]; 
    

    operation1 즉시 loginUser가 완료되면 완료됩니다,하지만이는 loginUser 방법은 로그인 과정을 완료 한 경우에만 할 것이라고 싶습니다 결과.
    이 문제를 해결하는 가장 좋은 패턴은 무엇입니까?
    나는 dispatch_group에 대해서도 생각했다. 그러나 이것은 dispatch_enter의 주입/코드의 특정 부분에서의 떠남을 요구할 것이다.

답변

0

하나의 접근법은 Promise을 구현하는 라이브러리를 사용하는 것입니다. 약속을 사용하면 스레드를 차단하지 않고도 비동기 문제를 해결할 수 있습니다. Serializing asynchronous tasks in objective C
이 :

예를 들어

, 당신이이 답을 살펴 걸릴 수 있습니다 당신은 당신이 답변을 게시 한 후 조언에 대한 Managing a bunch of NSOperation with dependencies

+0

들으을, 나는 또한이 라이브러리를 발견 https://github.com/ couchdeveloper/RXPromise – Andrea