1

私はinaAppPurchasesを実行しようとしており、次のコードを使用しています

     NSSet *myProductIdentifiers = [NSSet setWithObjects:
                                     @"inapppurchase.first",
                                     @"inapppurchase.second",
                                     @"inapppurchase.third",
                                     @"inapppurchase.fourth",
                                     @"inapppurchase.fifth",
                                     @"inapppurchase.sixth",
                                     nil];

        if ((self = [super initWithProductIdentifiers:myProductIdentifiers]))
        {

        }
        return self;
///////////////////////////////////    

    - (id)initWithProductIdentifiers:(NSSet *)identifiers
    {
        if ((self = [super init]))
        {
        }
        self.productIdentifiers = identifiers;

        return self;
    }

    - (void)requestProducts
    {
        self.request = [[SKProductsRequest alloc] initWithProductIdentifiers:productIdentifiers];
        request.delegate = self;
        [request start];
    }

    - (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
    {
        self.products = response.products;
        SKProduct *product = [self.products objectAtIndex:0];
        NSLog(@"%@", product.price);
        self.request = nil;
    }

問題は、呼び出しrequestProductsてからデリゲート関数 - (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)responseを呼び出すと、製品の順序がNSSet値と異なることです。

私のself.productsの順序は、5番目、1番目、2番目、4番目、6番目、3番目です。何故ですか?なぜそれは適切な順序ではないのですか?

4

1 に答える 1

1

ANSSetは、配列とは異なり、オブジェクトを特定の順序で保持しません。実際には、objectAtIndexでは機能しませんNSSet。内のオブジェクトを表示するにはNSSet、そのプロパティの1つを使用できます。たとえばanyObject、セット内のオブジェクトをランダムに返す、またはセット内のすべてのオブジェクトallObjectsを返し、NSArray返された配列内でランダムに順序付けられたオブジェクトを返します。 。はにSKProductsRequestアクセスしている可能性が高くNSSet.allObjects、配列内の各オブジェクトを列挙して、それが有効な製品であるかどうかを判断します。

ランダムに注文された有効な製品のセットが返送されたら、そのセットを、製品が適切に注文された配列と比較するだけです。製品の注文を保持しながら、無効な製品を特定することができます。

于 2013-02-24T19:20:44.163 に答える