我正在我的应用中设置应用内购买系统。我在iTune connect上注册了应用内购买。这是我的代码:
这是请求产品信息的代码:
- (void) requestProductData {
SKProductsRequest *request=
[[[SKProductsRequest alloc] initWithProductIdentifiers:
[NSSet setWithObject:@"com.myapp.id"]] autorelease];
request.delegate = self;
[request start];
}
这是接收产品信息的代码: (基本上我什么也没做,只是试着打印出来)
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {
NSArray *myProduct = response.products;
SKProduct *product = [myProduct objectAtIndex:0];
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4];
[numberFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
[numberFormatter setLocale:product.priceLocale];
NSString *formattedString = [numberFormatter stringFromNumber:product.price];
[numberFormatter release];
NSLog(@"Product 0 : %@, %@, %@, %@, %@", product.productIdentifier, product.localizedDescription, product.localizedTitle, product.priceLocale.localeIdentifier, formattedString);
[request autorelease];
}
我已经申请了代表:
@interface StoreObserver : NSObject <SKProductsRequestDelegate>{
我使用了一个按钮来触发requestProductData
。通过使用断点,我确信它被调用了。但是,productsRequest
从未被调用过。我也确保了连接性。
有人有任何线索吗?
答案 0 :(得分:2)
你跳过了我猜的部分内容
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
答案 1 :(得分:0)
事实证明问题在于:
- (void) requestProductData {
SKProductsRequest *request=
[[[SKProductsRequest alloc] initWithProductIdentifiers:
[NSSet setWithObject:@"com.myapp.id"]] autorelease]; //<- here
request.delegate = self;
[request start];
}
您永远不应该自动发布SKProductsRequest。我犯这个错误真是太蠢了。