InApp购买产品请求更新用户界面的问题

时间:2013-12-17 18:46:32

标签: ios objective-c in-app-purchase uilabel

使用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)'

2 个答案:

答案 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:加载产品,以确保您的视图之前已加载。