我正在将App 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方法中不起作用。
答案 0 :(得分:1)
行。所以我失踪了很多东西。感谢Carl让我指出了正确的方向:
1)我在InAppPurchaseManager.m文件和ViewController.m文件中都缺少myProducts的合成语句。 2)我需要在ViewController.h文件中为myProducts提供@property语句。 3)我需要在InAppPurchaseManager.m文件的productsRequest方法中使用self设置myProducts属性:
self.myProducts = response.products;
这就是myProducts中保存的数据在ViewController中永远不可见的原因。
希望这有助于其他人!