при покупке приложения - настоящая цена для Пользователя

У меня есть два контроллера просмотра. Один из них показывает доступные покупки в приложении. Когда пользователь выбирает один из них, он представляет новый контроллер представления, содержащий сведения о покупке и кнопку «Купить».

Способ, которым я передаю свой код из первого представления во второе, заключается в следующем:

-(IBAction)purchase1:(id)sender{
_purchasedController = [[iPadPurchasedViewController alloc] initWithNibName:nil bundle:nil];
_purchasedController.productID = @"xxxxx.xxxxx.xxxxx";
[self presentViewController:_purchasedController animated:YES completion:NULL];
[self.purchasedController getProductID:self];
}

Поэтому, когда пользователь выбирает одну кнопку, я передаю строку productID второму ViewController. Однако я хотел представить цену пользователю на первом контроллере представления. Может ли кто-нибудь помочь мне с этим? Спасибо.


person Mykod    schedule 11.01.2014    source источник
comment
Разве у вас нет информации о цене в контроллере первого представления? Отправьте SKProductsRequest для всех доступных идентификаторов продуктов и сохраните возвращаемый массив продуктов. Затем вы можете использовать этот массив, чтобы найти цену для отображения в любом контроллере представления.   -  person Vrasidas    schedule 11.01.2014
comment
Я сделал это, SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers:[NSSet setWithObject:@xxxxx]]; Но теперь мне нужно было сохранить каждый из них как SKProduct, чтобы затем назвать цену объекта, верно? Как я могу это сделать? Спасибо.   -  person Mykod    schedule 11.01.2014


Ответы (2)


Отредактированный ответ, чтобы быть более полным:

В вашем файле ViewController.h должно быть

@interface ViewController : UIViewController <SKProductsRequestDelegate> {
    NSArray *allProducts; 
}

Затем в ViewController.m, например. в viewDidload:

-(void) viewDidload {
    [super viewDidLoad];
    SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers:[NSSet setWithObjects:@"xxxx1",@"xxxx2",nil]];
    request.delegate=self; 
    [request start]; 
}

-(void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response{
    allProducts = response.products;
    NSLog(@"Fetched %d products", allProducts.count);
 }

И тогда его можно использовать как таковой:

-(NSString*) getPriceForProductWithID:(NSString*)productID{

   if(allProducts.count < 1) {
        NSLog(@"Did not fetch products yet");
   }
   else {

       NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
       numberFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4];
       [numberFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];

       for(SKProduct * product in allProducts) {

           if([product.productIdentifier isEqualToString:productID])
           {
               [numberFormatter setLocale:product.priceLocale];

               NSString *priceString= [numberFormatter stringFromNumber:product.price];

        NSLog(@"Product with ID: %@ has price: %@",product.productIdentifier, priceString);
              return priceString;
           } 
       }
    }
    return nil;
}
person Vrasidas    schedule 11.01.2014
comment
Ну, во-первых, я не знаю почему, но -(void)productsRequest не вызывается! Кроме того, я не понимаю, в строке: for(SKProduct * product in myProducts) как компилятор узнает, что это тот продукт, который я хочу использовать? Спасибо... - person Mykod; 11.01.2014
comment
Является ли класс, вызывающий SKProductsRequest, SKProductsRequestDelegate? Затем вы должны сделать: SKProductsRequest request = [[SKProductsRequest alloc] initWithProductIdentifiers:[NSSet setWithObject:@xxxxx]]; запрос.делегат = сам; Цикл for() просто перебирает все допустимые продукты и регистрирует их идентификатор и цену. Если вы ищете конкретную цену продукта, проверьте в цикле: - person Vrasidas; 11.01.2014

Получить продукты:

SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers:[NSSet setWithObject:@"xxxxx"]];

Если это будет успех, будет вызван следующий делегат:

    - (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {
    if (response.products == nil) {
        NSLog(@"No product belonging to the app!");
    }
    if ([response.invalidProductIdentifiers count] != 0) {
        NSLog(@"The following product indentifiers are invalid: %@",response.invalidProductIdentifiers);
    }
    for (SKProduct* prod in response.products) {
        NSLog(@"Proce: %@",prod.price);
    }

Надеюсь, это поможет вам.

Важно: код не тестировался, я только что написал его...

Удачи!

person ingaham    schedule 11.01.2014