Доступ к SKProductResponse извне объекта - PullRequest
1 голос
/ 18 февраля 2011

Я интегрирую In App Purchase в свое приложение и создал объект, который реализует обратный вызов делегата:

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

как один из его методов.

В моем случае у меня есть несколько объектов SKProduct, которые будут возвращены response.products. Я хотел бы получить доступ к массиву myProduct за пределами объекта в контроллере представления, где я отражаю некоторые детали SKProduct, такие как цена и описание продукта.

Вот объявление интерфейса для класса покупки в приложении:

@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 Ответ

1 голос
/ 19 февраля 2011

OK. Так что я пропустил несколько вещей. Спасибо Карлу за то, что он указал мне правильное направление:

1) Мне не хватало синтезирующих операторов для myProducts как в файле InAppPurchaseManager.m, так и в файле ViewController.m. 2) Мне нужны операторы @property для myProducts в файле ViewController.h. 3) Мне нужно было установить свойство myProducts с помощью self в методе productsRequest файла InAppPurchaseManager.m:

self.myProducts = response.products;

Вот почему данные, хранящиеся в myProducts, никогда не были видны в ViewController.

Надеюсь, это поможет кому-то еще!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...