0

ここにあるiOS 用 PayPal モバイル ペイメント ライブラリのドキュメントには 、ライブラリを初期化するための 2 つのオプションがあると記載されています。オプション 1 は次のとおりです。

「必要なときに、メイン スレッドで PayPal オブジェクトを初期化します。getPayButtonWithTarget メソッドを呼び出す前に、毎回ライブラリを初期化します。この実装は、シングル スレッド プログラミング モデルを使用するため単純です。initializeWithAppID 呼び出しはブロックしているため、アプリケーションは初期化が完了するのを待ちます。
このメソッドを使用するには、次の 1 行のコードを使用できます [PayPal initializeWithAppID:appID];

ただし、メイン スレッドでこの関数を呼び出すたびに、 が返されSTATUS_INPROGRESSます。そして、ステータスが変わるまで手動でスリープするしかありませんSTATUS_COMPLETED_SUCCESS.

何を与える?

4

1 に答える 1

1


[PayPal initializeWithAppID:appID]のメイン スレッドで呼び出すことができます が、ボタンをクリックして支払いを行う前に、情報を初期化するためにViewController2 ~ 3 秒待つ必要があります。Paypal(この例を使用する
[[PayPal getPayPalInst] getPayButtonWithTarget:self...];と、最初はボタンが無効になっていることがわかります。1 ~ 2 秒後にのみ有効になります (黄色に変わります)。
- (IBAction)simplePayment{}メインスレッドから呼び出したい場合は、バックグラウンド スレッドを作成する必要があります。同様のスレッド: iPhone PayPal初期化に失敗しました

-(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];
}
于 2013-03-28T06:54:24.530 に答える