2014-01-12 101 views
0

我让我的应用程序内购买标题(我可以看到它在NSLog),但显示标题viewDidLoad之后被称为UILabel。有没有什么办法可以在viewDidLoad之前得到标题,这样UILabel会显示标题的UILabel没有显示在应用程序内购买标题

以下是我的代码。如果您需要我发布更多内容,请告诉我,谢谢!

PurchaseViewController.h

@interface PurchaseViewController : UIViewController 
<SKPaymentTransactionObserver, SKProductsRequestDelegate> 

@property (strong, nonatomic) SKProduct *product; 
@property (strong, nonatomic) NSString *productID; 
@property (strong, nonatomic) IBOutlet UILabel *productTitle; 
@property (strong, nonatomic) IBOutlet UIButton *buyButton; 
@property (strong, nonatomic) IBOutlet UITextView *productDescription; 
- (IBAction)buyProduct:(id)sender; 
- (void)getProductInfo:(UIViewController *)viewController; 

@property (nonatomic) int buttonNumber; 

@end 

PurchaseViewController.m

#pragma mark - SKProductsRequestDelegate 
- (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; 
    } 
    else { 
     _productTitle.text = @"Product not found"; 
    } 

    products = response.invalidProductIdentifiers; 

    for (SKProduct *product in products) { 
     NSLog(@"Product not found: %@", product); 
    } 

} 



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

#pragma mark SKPaymentTransactionObserver 

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

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

      default: 
       break; 
     } 
    } 
} 
+0

视图做负载后的标签仅存在。您的描述中不清楚您的问题。 – Wain

+0

视图加载时,'productTitle'和'productDescription'不会加载到IBOutlet中。当视图加载时,我想让'IBOutlet's显示'productTitle'和'productDescription'。但它只是在视图加载后循环方法,所以它留下'IBOutlet'的空白,因为没有找到'productTitle'和'productDescription'。明白我的意思了吗? – Realinstomp

回答

1

通常的结构是表示包含信息的视图之前,得到产物信息。然后,在创建视图控制器并显示其视图时,将该信息传递给视图控制器。

+0

那么我需要获取上一个视图控制器的信息呢? – Realinstomp

+0

这就是我所做的。有一个按钮为用户提供更多信息。如果用户点击它,我试图从商店收集信息,如果我成功了,我创建下一个视图控制器,填充它并呈现它。 – matt

+0

_any_视图控制器的情况也是如此,您希望它的所有信息都显示在其中。您必须事先收集该信息。那是时间的本质;它只会朝着一个方向发展! – matt

0

此外,你不应该在任何视图控制器代码中处理这些事情。获取产品信息和类似的东西(位置,会话,应用程序的模型的工厂等)是一个典型的用于(可选状态的)管理器单例(在此情况下为fe PurchaseManager)的共享数据的用例,它将在应用程序启动时调用/ AppDelegate方法并在后台工作,独立于您的UI代码/线程。

实施例:

- (void)applicationDidBecomeActive:(UIApplication *)application 
{ 
    [[PurchaseManager defaultManager] fetchProducts]; 
}