2012-09-24 1 views
0

iOS 용 PayPal 모바일 결제 라이브러리 설명서 here 에는 라이브러리를 초기화하는 두 가지 옵션이 있다고 나와 있습니다. 옵션 1은 다음과 같습니다.. 그것은 단일를 사용하기 때문에iOS에서 PayPal의 MPL 라이브러리 초기화가 실제로 차단 절차입니까?

"당신이 그것을 필요로하는 메인 쓰레드에 페이팔 객체를 초기화 라이브러리 당신이 getPayButtonWithTarget 메서드를 호출하기 전에 각 시간을 초기화이 구현은 간단 입니다 .. initializeWithAppID 호출이 차단 프로그래밍 모델을 스레드, 그래서 초기화를위한 응용 프로그램 대기가 완료 될 때까지
이 방법을 사용하려면 한 줄의 코드를 사용할 수 있습니다 [PayPal initializeWithAppID:appID]; "

그러나 메인 스레드에서이 함수를 호출 할 때마다 나는 STATUS_INPROGRESS을 반환합니다. 그리고 상태가 STATUS_COMPLETED_SUCCESS.이 될 때까지 수동으로 수면을 취할 수 밖에 없습니다.

무엇이 제공됩니까?

답변

1

당신은 ViewController의 메인 스레드에서
[PayPal initializeWithAppID:appID]를 호출 할 수 있습니다,하지만 당신은 지불을 만들기 위해 버튼을 클릭하기 전에 정보를 초기화 Paypal 2 ~ 3 초 동안 기다려야 할 것이다. 당신은 예를
[[PayPal getPayPalInst] getPayButtonWithTarget:self...];를 사용하는 경우 (당신이 (1-2의 후) 노란색으로 설정합니다. 을 당신이 mainthread에서
- (IBAction)simplePayment{}를 호출 할 경우에만 사용할 수 intially 해제 버튼을 볼 수, 당신은 배경을 만들어야합니다 스레드 비슷한 스레드 : iPhone PayPal init failed

-(void) viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    [PayPal initializeWithAppID:@"APP-80W284485P519543T" forEnvironment:ENV_SANDBOX]; 
    [NSThread detachNewThreadSelector:@selector(checkInitStatusAndPay) toTarget:self withObject:nil]; 
} 

-(void) checkInitStatusAndPay { 


    while (TRUE) { 
     PayPalInitializationStatus status = [PayPal initializationStatus]; 
     NSLog(@"status %u", status); 
     if(status == STATUS_COMPLETED_SUCCESS) { 

      [self performSelectorOnMainThread:@selector(simplePayment:) withObject:nil waitUntilDone:NO]; 
      break; 
     } 
    [NSThread sleepForTimeInterval:2]; 
    } 
} 

- (IBAction)simplePayment:(id)sender { 

.... 
    [[PayPal getPayPalInst] checkoutWithPayment:payment]; 
}