при покупка на приложение - текуща цена за потребителя

Имам два View Controller. Един от тях показва наличните покупки в приложението. Когато потребител избере един от тях, той представя нов View Controllers, съдържащ подробностите за покупката и бутона „Купете“.

Начинът, по който предавам кода си от първия изглед към втория, е следният:

-(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. Исках обаче да представя цената на потребителя на първия View Controller. Може ли някой да ми помогне с това? Благодаря ти.


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]]; request.delegate = себе си; Цикълът for() просто преминава през всички валидни продукти и регистрира техния идентификатор и цена. Ако търсите конкретна цена на продукта, проверете в цикъла: if([product.productIdentifier isEqualToString:@xxxxxx.xxxxx.xxxxx]){ / използвайте този продукт */ } - 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