2013-12-17 5 views
1

У меня есть странная проблема с обновлением моего пользовательского интерфейса с информацией о продукте из моего продукта покупки InApp.InApp Purchase productsRequest issue with update userinterface

У меня есть следующий код, чтобы получить информацию о моем продукте. Моя проблема в том, что я не обновляю свои ярлыки или включен параметр «_buyButton», НО я вижу правильные значения, когда использую NSLog. И да, я связал свои отделения в Интернете. В методе 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

Могу ли я уточнить: вы получаете 'productsRequest: <некоторый локализованный заголовок>' в вашем отладочном выходе? –

+0

Да, я вижу, что мне нужно увидеть, но несколько строк выше. Я не могу установить это значение в UILabel. – Jan

+0

Вы тот же человек, что и [user3104325] (http://stackoverflow.com/users/3104325/user3104325)? Это очень похожий вопрос, который был задан ранее. –

ответ

1

Благодаря jaydee3 я нашел проблему, но не очень хорошее решение. Проблема заключалась в том, что информация о продукте была получена до того, как был создан viewcontroller.

Я исправил эту проблему на данный момент, вызвав «productsRequest:» из метода viewDidLoad.

- (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); 

} 
+0

есть ли способ, которым вы можете обновить больше кода для своего решения, потому что у меня такая же точная проблема! – Realinstomp

+0

Hi, точно такой же проблема для меня тоже. Я пытаюсь выполнить ваш ответ. Можете ли вы подробно рассказать о том, что связано с ключом 'BuyKEY', пожалуйста? – GoldXApp

0

ли вы проверить значения _buyButton или _productTitle? Наверное, они все еще ноль, когда вызывается делегат, потому что представление еще не загружено? Я прав?

Когда вы начали загрузку продукции? Простое решение: загрузите продукты с viewDidLoad:, чтобы убедиться, что ваш вид загружен раньше.

+0

ОК просто проверил его, viewDidLoad вызывается перед продуктами Request. Я добавил NSLog (@ "productsRequest% @", _product.localizedTitle); для просмотраDidLoad, но он возвращает (null). – Jan

+0

установите точку останова в методе делегата, проверьте значения '_buyButton' и т. Д. Здесь. Если '_product' равен нулю в' viewDidLoad', делегат еще не был вызван. Чем ваша проблема в другом месте. Покажите свои магазины, покажите, как вы выделяете/запускаете viewController. – calimarkus

+0

Я обновил свой вопрос. Значения равны нулю, и я также не могу выполнить «действие покупки». Если я понимаю вас правильно, информация о продукте извлекается до того, как диспетчер представлений готов обрабатывать обновления интерфейса? – Jan

Смежные вопросы