我在使用 InApp 购买产品的产品信息更新我的用户界面时遇到了一个奇怪的问题。
我有以下代码,用于检索我的产品信息。我的问题是我没有更新我的标签或启用“_buyButton”,但是当我使用 NSLog 时我看到了正确的值。是的,我链接了我的 IB 网点。在 viewDidLoad 方法中,我可以更改/更新我的界面对象。我在真实设备上运行该应用程序。
缺少什么?
-(void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
{
NSArray *products = response.products;
if (products.count != 0)
{
_product = products[0];
_buyButton.enabled = YES;
_productTitle.text = _product.localizedTitle;
_productDescription.text = _product.localizedDescription;
NSLog(@"productsRequest %@", _product.localizedTitle);
} else {
_productTitle.text = @"Product not found";
}
products = response.invalidProductIdentifiers;
for (SKProduct *product in products)
{
NSLog(@"Product not found: %@", product);
}
}
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
我还意识到,我无法执行“购买操作”。
- (IBAction)buyProduct:(id)sender {
SKPayment *payment = [SKPayment paymentWithProduct:_product];
[[SKPaymentQueue defaultQueue] addPayment:payment];
}
它返回以下错误:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Invalid product identifier: (null)'
最佳答案
感谢 jaydee3 我找到了问题,但不是一个很好的解决方案。问题是,在 View Controller 准备好之前检索了产品信息。
我现在通过从 viewDidLoad 方法调用“productsRequest:”解决了这个问题。
- (void)viewDidLoad
{
[super viewDidLoad];
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
purchasedApp = [userDefaults boolForKey:@"PurchasedKEY"];
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
_productID = @"YourIDHere";
if ([SKPaymentQueue canMakePayments])
{
SKProductsRequest *request = [[SKProductsRequest alloc]
initWithProductIdentifiers:
[NSSet setWithObject:_productID]];
request.delegate = self;
[request start];
}
else
_productDescription.text = NSLocalizedString(@"EnableInAppKEY", @"");
if (!purchasedApp) {
_buyButton.enabled = YES;
}
_productTitle.text = _product.localizedTitle;
_productDescription.text = _product.localizedDescription;
NSLog(@"productsRequest %@", _product.localizedTitle);
}
关于ios - 在 App Purchase 产品请求中更新用户界面的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20642237/