显示应用内购买的本地化价格

6
我在My ViewController中使用以下代码,但是当我调用_priceFormatter时,它会显示价格为(null)
 [buyButton setTitle:[NSString stringWithFormat:@"Upgrade for %@", [_priceFormatter stringFromNumber:product.price]] forState:UIControlStateNormal];

ViewController.m

{


    NSNumberFormatter * _priceFormatter;


}

ViewDidLoad

    [RageIAPHelper sharedInstance];

    _products = nil;

    [[RageIAPHelper sharedInstance] requestProductsWithCompletionHandler:^(BOOL success, NSArray *products) {
        if (success) {
            _products = products;

        }
    }];

    SKProduct * product = (SKProduct *) [_products objectAtIndex:0];


    ([[RageIAPHelper sharedInstance] productPurchased:product.productIdentifier]);

  _priceFormatter = [[NSNumberFormatter alloc] init];
    [_priceFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4];
    [_priceFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
    [_priceFormatter setLocale:product.priceLocale];

    [_priceFormatter stringFromNumber:product.price];

编辑过的

_priceFormatter = [[NSNumberFormatter alloc] init];
[_priceFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4];
[_priceFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
[_priceFormatter setLocale:product.priceLocale];

NSString *priceString = [_priceFormatter stringFromNumber:product.price];

按钮:

    UIButton *buyButton = [[UIButton alloc] initWithFrame:CGRectMake(-1, 370, 320, 60)];
[buyButton setTitle:[NSString stringWithFormat:@"Upgrade for %@", priceString] forState:UIControlStateNormal];
    [buyButton.titleLabel setFont:[UIFont boldSystemFontOfSize:13.0]];
    [buyButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
    [buyButton.titleLabel setShadowColor:[UIColor colorWithWhite:0.1 alpha:1.0]];
    [buyButton.titleLabel setShadowOffset:CGSizeMake(0, -1)];
    [buyButton addTarget:self action:@selector(buyButtonTapped:) forControlEvents:UIControlEventTouchUpInside];
    buyButton.tag = 0;
    [[self view] addSubview:buyButton];

调用 requestProductsWithCompletionHandler 是异步的。你试图在它被设置之前访问 _products - rmaddy
在完成处理程序被调用之前,请勿处理产品。 - rmaddy
是的,但我该如何改变我的代码使其工作? - Omar
没问题,但是你应该在用户点击按钮时调用 productPurchased,而不是仅仅显示按钮时就调用。 - rmaddy
让我们在聊天中继续这个讨论:http://chat.stackoverflow.com/rooms/45673/discussion-between-omar-and-rmaddy - Omar
显示剩余3条评论
1个回答

6

你需要等待完成处理程序被调用后才能处理产品:

[RageIAPHelper sharedInstance];
_products = nil;

[[RageIAPHelper sharedInstance] requestProductsWithCompletionHandler:^(BOOL success, NSArray *products) {
    if (success) {
        _products = products;

        SKProduct * product = _products[0];

        [[RageIAPHelper sharedInstance] productPurchased:product.productIdentifier];

        _priceFormatter = [[NSNumberFormatter alloc] init];
        [_priceFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
        [_priceFormatter setLocale:product.priceLocale];
        NSString *price = [_priceFormatter stringFromNumber:product.price];
        someLabel.text = price;
    }
}];

正如您所看到的,您需要实际使用格式化后的数字字符串。您只是把这个值丢掉了。


谢谢,我已经编辑了我的问题如上所示。我仍然得到(null)。 - Omar
我在我的应用程序中使用了这些代码,但为什么它总是显示美元?我尝试在我的iPhone上更改语言设置,但没有起作用。出了什么问题? - S1U

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接