initメソッド中にAppStore製品の詳細を要求しているので、アプリ内購入製品の価格をポップオーバー内のボタンに表示したいと思います。
product配列を正しく返すリクエストと、価格を含む文字列を既に設定しました。私の問題は、ポップオーバービューコントローラーがAppStoreの応答の前にビューを作成し、タイトルラベルが(null)で初期化されることです。ボタンのタイトルセットを遅らせることができれば、リクエストが応答されたと確信できたはずですが、それではアプリがクラッシュします。
私のリクエストは
- (void)requestProUpgradeProductData {
NSSet *productIdentifiers = [NSSet setWithObject:@"com.thePrintLabs.product"];
productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:productIdentifiers];
productsRequest.delegate = self;
[productsRequest start];
}
それから私は次のように返信を読みました:
NSArray *products = response.products;
proUpgradeProduct = [products count] == 1 ? [[products firstObject] retain] : nil;
if (proUpgradeProduct)
{
NSLog(@"Product title: %@" , proUpgradeProduct.localizedTitle);
NSLog(@"Product description: %@" , proUpgradeProduct.localizedDescription);
NSLog(@"Product price: %@" , proUpgradeProduct.price);
NSLog(@"Product id: %@" , proUpgradeProduct.productIdentifier);
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setMaximumFractionDigits:2];
priceWeek = [NSString stringWithString:[formatter stringFromNumber:proUpgradeProduct.price]];
}
popOverViewControllerで、ボタンのタイトルを設定するためにこれを行っています。
myAppDelegate *delegate = (myAppDelegate*)[[UIApplication sharedApplication] delegate];
button = [UIButton buttonWithType:UIButtonTypeCustom];
button2 = [UIButton buttonWithType:UIButtonTypeCustom];
[button addTarget:self
action:@selector(button1Week:)
forControlEvents:UIControlEventTouchDown];
NSString *priceWeekly = [NSString stringWithFormat:@"Weekly %@",delegate.priceWeekly];
[button setTitle:priceWeekly forState:UIControlStateNormal];
私のボタンは常に(null)で初期化されます。リクエストが成功した後にボタンを更新できますか?