ios - 在 App Purchase 产品请求中更新用户界面的问题

标签 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)'

最佳答案

感谢 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/

相关文章:

ios - Xcode状态: "Verify the value of the CODE_SIGN_ENTITLEMENTS"

objective-c - 为什么一个对象在销毁时是否为 Nil 很重要?

objective-c - 自动引用计数 (ARC) 和保留计数

ios - 自动续订订阅

iPhone - 应用内购买 : recording the purchase

ios - NSPredicate 搜索出现 NSDate 错误

objective-c - CoreLocation , MapKit 错误

ios - 如何在平面/ycbcr/420f/yuv/NV12/非 rgb 的 CVPixelBufferRef 上绘图?

objective-c - ARC 中的 object_getInstanceVariable/object_setInstanceVariable

Android:如何使用应用内计费更新 Android 应用?