当调用实现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应该更新。 (右?)
是什么给出的?它一定是缺少简单的东西吗?
感谢任何见解,指示等。
答案 0 :(得分:0)
事实证明,对UI的更新都发生在同一个运行循环中。当运行循环完成时,UI会更新 - 似乎一下子就完成了。
我通过NSOperation将事务处理移动到自己的线程中来解决这个问题。从NSOperation,我正在根据需要更新UI(通过回调主线程)。
感谢您的观点!