首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在我的SKProductRequest期间,我的UIButtons和UILabels变为零。(XCODE 7)

在我的SKProductRequest期间,我的UIButtons和UILabels变为零。(XCODE 7)
EN

Stack Overflow用户
提问于 2016-04-20 22:47:39
回答 1查看 56关注 0票数 0

下面是我的ShopViewController.m,最初调用我的3个UIButtons和我的UILabel。

My Shop页面可以正确加载,但是一旦调用了UIButtons和UILabels的ProductsRequest方法,就不知道为什么了。所有项都是.h文件中的(强的、非原子的)属性,并且已经链接到ShopViewController中的引用插座。任何帮助都是非常感谢的。

当我按下主游戏viewController上的购买按钮时,它会从我的*homeViewController中调用。

代码语言:javascript
复制
#import "ShopViewController.h"
#import "ViewController.h"

@interface ShopViewController ()
@property (strong, nonatomic) ViewController *homeViewController;

@end

@implementation ShopViewController
@synthesize fvProductTitle;

- (void)viewDidLoad {
[super viewDidLoad];
_fvBuyButton.enabled = YES;
_ddBuyButton.enabled = NO;
_bundleBuyButton.enabled = NO;

fvProductTitle.text = @"don't read this";
}

- (IBAction)buyFVProduct:(id)sender {
SKPayment *payment = [SKPayment paymentWithProduct:_fvProduct];
[[SKPaymentQueue defaultQueue] addPayment:payment];
}

- (IBAction)buyDDProduct:(id)sender {
SKPayment *payment = [SKPayment paymentWithProduct:_ddProduct];
[[SKPaymentQueue defaultQueue] addPayment:payment];
}

- (IBAction)buyBundleProduct:(id)sender {
SKPayment *payment = [SKPayment paymentWithProduct:_bundleProduct];
[[SKPaymentQueue defaultQueue] addPayment:payment];
}

- (void) getProductInfo:(ViewController *) viewController {
_homeViewController = viewController;

if ([SKPaymentQueue canMakePayments])
{
    SKProductsRequest *request = [[SKProductsRequest alloc]
                                  initWithProductIdentifiers:
                                  [NSSet setWithObjects:self.bundleProductID, self.ddProductID, self.fvProductID, nil]];
    request.delegate = self;

    [request start];
}
else{
    _fvProductDescription.text = @"please enable app purchases";
}
}

#pragma mark -
#pragma mark SKProductsRequestDelegate

-(void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
{
NSArray *products = response.products;

if (products.count != 0)
{
    _fvProduct = products[2];
    _fvBuyButton.enabled = YES;
    fvProductTitle.text = _fvProduct.localizedTitle;

    _ddProduct = products[1];
    _ddBuyButton.enabled = YES;
    _ddProductTitle.text = _ddProduct.localizedTitle;

    _bundleProduct = products[0];
    _bundleBuyButton.enabled = YES;
    _bundleProductTitle.text = _bundleProduct.localizedTitle;

} else {
    fvProductTitle.text = @"Full Version Product not found";
    _ddProductTitle.text = @"Dirty Dozen Product not found";
    _bundleProductTitle.text = @"Bundle Product not found";
}

products = response.invalidProductIdentifiers;

}

#pragma mark -
#pragma mark SKPaymentTransactionObserver

-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
for (SKPaymentTransaction *transaction in transactions)
{
    switch (transaction.transactionState) {
        case SKPaymentTransactionStatePurchased:
            [self unlockFullVersion];
            [[SKPaymentQueue defaultQueue]
             finishTransaction:transaction];
            break;

        case SKPaymentTransactionStateFailed:
            NSLog(@"Transaction Failed");
            [[SKPaymentQueue defaultQueue]
             finishTransaction:transaction];
            break;

        default:
            break;
    }
}
}

这是我的ShopViewController.h,用于查看我设置的属性。

代码语言:javascript
复制
#import <UIKit/UIKit.h>
#import <StoreKit/StoreKit.h>

@interface ShopViewController : UIViewController   <SKPaymentTransactionObserver, SKProductsRequestDelegate> {

}

@property (nonatomic) BOOL *isFullVersionAvailable;

// Store Kit
@property (strong, nonatomic) SKProduct *fvProduct;
@property (strong, nonatomic) SKProduct *ddProduct;
@property (strong, nonatomic) SKProduct *bundleProduct;

@property (strong, nonatomic) NSString *fvProductID;
@property (strong, nonatomic) NSString *ddProductID;
@property (strong, nonatomic) NSString *bundleProductID;

@property (strong, nonatomic) IBOutlet UIButton *fvBuyButton;
@property (strong, nonatomic) IBOutlet UIButton *ddBuyButton;
@property (strong, nonatomic) IBOutlet UIButton *bundleBuyButton;

@property (strong, nonatomic) IBOutlet UILabel *fvProductTitle;
@property (strong, nonatomic) IBOutlet UILabel *ddProductTitle;
@property (strong, nonatomic) IBOutlet UILabel *bundleProductTitle;
@property (strong, nonatomic) IBOutlet UITextView *fvProductDescription;

- (IBAction)buyFVProduct:(id)sender;
- (IBAction)buyDDProduct:(id)sender;
- (IBAction)buyBundleProduct:(id)sender;
- (void)getProductInfo:(UIViewController *)viewController;

@end

My ViewController.m下面,我的purchaseItem是用户按下以转换到商店页面并调用getProductInfo方法的内容。

代码语言:javascript
复制
- (IBAction)purchaseItem:(id)sender {
shopViewController.fvProductID = @"BurnsyBadges.FullVersion";
shopViewController.ddProductID = @"BurnsyBadges.DirtyDozen";
shopViewController.bundleProductID = @"BurnsyBadges.Bundle";

[shopViewController getProductInfo: self];
}
EN

回答 1

Stack Overflow用户

发布于 2016-06-08 22:34:50

来回答我自己的问题。我在几个星期前就弄清楚了,没有更新这个。但是,为了让多个ViewControllers正确访问产品购买页面,我必须纠正一些事情。

为了让一个页面正常工作,我需要在我所有的ViewControllers中添加一个NavigationController。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36747471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档