我将In App Purchase集成到我的应用程序中,并创建了一个实现委托回调的对象:

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
{
    NSArray *myProduct = response.products;
    // populate UI
    [request autorelease];
}


作为其方法之一。

就我而言,我有多个SKProduct对象,这些对象将由response.products返回。我想做的是能够在视图控制器中访问对象外部的myProduct数组,在该控制器中我可以反映一些SKProduct详细信息,例如价格和产品描述。

这是In App Purchase类的接口声明:

@interface InAppPurchaseManager : NSObject <SKProductsRequestDelegate, SKPaymentTransactionObserver> {

    NSArray *myProducts;
    SKProductsRequest *productsRequest;

}

// public methods
- (void)loadStore;
- (BOOL)canMakePurchases;
- (void)purchaseFeature:(NSString *)productId;

@property (nonatomic, retain) NSArray *myProducts;

@end


然后在我的视图控制器中的viewDidLoad方法:

- (void) viewDidLoad {
        /* Instantiate InAppPurchaseManager object then kick it off to collect Product info */
    iapManager = [InAppPurchaseManager new];
    [iapManager loadStore];

    SKProduct *myProduct;

    for (myProduct in iapManager.myProducts) {
            NSLog(@"Product title: %@" , myProduct.localizedTitle);
        NSLog(@"Product description: %@" , myProduct.localizedDescription);
        NSLog(@"Product price: %@" , myProduct.price);
        NSLog(@"Product id: %@" , myProduct.productIdentifier);
    }

} // end viewDidLoad


我有一个例外:


  [InAppPurchaseManager myProducts]:无法识别的选择器已发送到实例0x162d60


我在这里做错什么,如何将我的SKProduct数据“导出”到视图控制器?任何想法都非常感谢!

另外,在productsRequest:方法中,我可以使用NSLog并通过同一循环进行打印,并看到SKProduct数据完美地反映在控制台输出中;它只是在viewDidLoad方法中不起作用。

最佳答案

好。因此,我缺少了很多东西。感谢卡尔为我指明了正确的方向:

1)我在InAppPurchaseManager.m文件和ViewController.m文件中都缺少myProducts的synthesize语句。
2)我需要在ViewController.h文件中为myProducts使用@property语句。
3)我需要在InAppPurchaseManager.m文件的productsRequest方法中使用self来设置myProducts属性:

self.myProducts = response.products;


这就是为什么myProducts中保存的数据在ViewController中从不可见的原因。

希望这可以帮助其他人!

关于ios - 从对象外部访问SKProductResponse,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5038393/

10-14 20:43
查看更多