来自SKPaymentTransactionObserver方法的UI更新

时间:2010-09-02 20:18:50

标签: iphone

当调用实现SKPaymentTransactionObserver的对象时,我似乎无法更新我的UI。

具体来说,我的UI中有一个(UILabel *)debugLabel(全部通过IB连接)。我实现了观察者协议:

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions {

    NSLog(@"paymentQueue: current thread is main thread: %@", [[NSThread currentThread] isMainThread]?@"YES":@"NO");

    for (SKPaymentTransaction *transaction in transactions) {
        if (transaction.transactionState == SKPaymentTransactionStatePurchased) {


            // if the store is still being viewed, update appropriately
            if(spViewController.storeViewController) {
                [spViewController.storeViewController transactionComplete:transaction];
            }
        }
        // other transactionStates omitted for brevity
    }
}

执行[spViewController.storeViewController transactionComplete:transaction],但UILabel不显示指定的文本。

- (void) transactionComplete:(SKPaymentTransaction *) transaction {
    NSLog(@"CBTSVC transactionComplete");
    debugLabel.text = @"CBTSVC transactionComplete";

    // other UI updates omitted for brevity
}

代码执行时,NSLog会将字符串转储到控制台,但UILabel不会更新。我已经确认在主线程上发生了对SKPaymentTransactionObserver的回调 - 所以UI应该更新。 (右?)

是什么给出的?它一定是缺少简单的东西吗?

感谢任何见解,指示等。

1 个答案:

答案 0 :(得分:0)

事实证明,对UI的更新都发生在同一个运行循环中。当运行循环完成时,UI会更新 - 似乎一下子就完成了。

我通过NSOperation将事务处理移动到自己的线程中来解决这个问题。从NSOperation,我正在根据需要更新UI(通过回调主线程)。

感谢您的观点!