0

我使用测试用户帐户来测试我的应用内购买应用程序。我使用了产品名称,例如#define PRODUCT_IDENTIFIER @"com.companyname.appname.P1"当我在模拟器中运行我的应用程序时,我在日志中得到以下信息:

是的,你可以付款2013-04-22 11:37:44.809 appname[2382:c07] -[__NSCFConstantString productIdentifier]:无法识别的选择器发送到实例 0x1ac04

代码:

    -(void)checkForPayments{
        if ([SKPaymentQueue canMakePayments])
        {
            printf("\n YES u can make payments");
   //   SKPayment *myPayment = [SKPayment paymentWithProductIdentifier:PRODUCT_IDENTIFIER];
        SKPayment *myPayment = [SKPayment paymentWithProduct:PRODUCT_IDENTIFIER];
      [[SKPaymentQueue defaultQueue] addPayment:myPayment];
    [[SKPaymentQueue defaultQueue] addTransactionObserver:self];              
    }
4

3 回答 3

6
   1. SKPayment *myPayment = [SKPayment paymentWithProductIdentifier:PRODUCT_IDENTIFIER]; // CORRECT
   2. SKPayment *myPayment = [SKPayment paymentWithProduct:PRODUCT_IDENTIFIER]; //WRONG
  1. 正确,因为您传递的是 NSString 的 PRODUCT_IDENTIFIER,它需要 NSString

  2. 是错误的,因为您传递的参数是 NSString,因为它SKProduct不需要NSString..

要使用SKProduct您需要首先使用SKProductRequest以下产品

SKProductsRequest *req = [[SKProductsRequest alloc] initWithProductIdentifiers:[NSSet setWithObject:PRODUCT_IDENTIFIER]];
req.delegate = self;
[req start]; 

然后在DelegateSKProductRequest必须做以下

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response{

      for(SKProduct *product in response.products){
            SKPayment *myPayment = [SKPayment paymentWithProduct:product];
      } 
}
于 2013-04-22T06:39:41.153 回答
0

嘿,您正在将 NSString 传递给一个接受其他类型对象的函数。这就是你得到的原因

-[__NSCFConstantString productIdentifier]: unrecognized selector sent to instance
于 2013-04-22T06:40:09.303 回答
0

检查您在 iTunes 上创建的 inApp id 是否与您在应用中定义的 inApp id 匹配。并确保您将 inApp 与您在 iTunes 中的应用相关联。

于 2013-04-22T06:40:11.707 回答