使用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)'
答案 0 :(得分:1)
感谢jaydee3我找到了问题,但不是一个好的解决方案。问题是,在viewcontroller准备好之前检索了产品信息。
我现在解决了这个问题,从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);
}
答案 1 :(得分:0)
您是否检查过_buyButton
或_productTitle
的值?当调用委托时,可能它们仍然是零,因为视图尚未加载?我是对的吗?
您何时开始加载产品?最简单的解决方案:从viewDidLoad:
加载产品,以确保您的视图之前已加载。