2013-05-16 46 views
0

.H這個Objective-C字典代碼是做什麼的?

@property (nonatomic, strong) NSMutableDictionary * products; //not synthesized in .m 

.M

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response 
{ 
    NSLog(@"Loaded list of products..."); 
    _productsRequest = nil; 

    NSArray * skProducts = response.products; 
    for (SKProduct * skProduct in skProducts) 
    { 
     IAPProduct * product = _products[skProduct.productIdentifier]; 
     product.skProduct = skProduct; 
     product.availableForPurchase = YES; 
    } 

    for (NSString * invalidProductIdentifier in response.invalidProductIdentifiers) 
    { 
     IAPProduct * product = _products[invalidProductIdentifier]; 
     product.availableForPurchase = NO; 
     NSLog(@"Invalid product identifier, removing: %@", invalidProductIdentifier); 
    } 

    NSMutableArray * availableProducts = [NSMutableArray array]; 
    for (IAPProduct * product in _products.allValues) { 
     if (product.availableForPurchase) { 
      [availableProducts addObject:product]; 
     } 
    } 

    _completionHandler(YES, availableProducts); 
    _completionHandler = nil;  
} 

我在與線下的麻煩:

IAPProduct * product = _products[skProduct.productIdentifier]; 

我想我們正在設置類型IAPProduct *product= NSMutableDictionary[NSArray.productIdentifier];

我以爲Array只有元素(objectAtIndex)?爲什麼有一個點(。)和productIdentifier?

而且

+2

這與'IAPProduct * product = [_products objectForKey:[skProduct productIdentifier]];' – rmaddy

+0

謝謝。 objectForkey有什麼價值?如果它被當作字典對待,那麼爲什麼它在這裏被當作一個數組來處理:IAPProduct * product = _products [invalidProductIdentifier]; < - 這裏的對象和價值是什麼? – user1107173

+2

沒有陣列。這是現代的Objective-C語法。如果'_products'是一個'NSDictionary',那麼方括號中的值就是字典中的一個鍵。如果'_product'是'NSArray',那麼方括號中的值必須是有效的數組索引。 – rmaddy

回答

1

你無法理解這一行:

IAPProduct * product = _products[skProduct.productIdentifier]; 

讓我們把它分解:

NSString *key = skProduct.productIdentifier; 
IAPProduct * product = _products[key]; 

第二行是現代語法:

IAProduct * product = [_products objectForKey:key]; 

這是在字典中查找給定密鑰的常用方法。

+0

謝謝。我們如何分配IAProduct的一個實例objectForkey。 – user1107173

+0

對不起,我不明白這個問題。 'objectForKey:'是'NSDictionary'類的一個方法。退後。你的'_products'字典(你永遠不會顯示它是如何填充或設置的)似乎包含一組''IAPProduct''對象,它們代表產品標識符的'NSString'對象。當你調用'_products [someIdentifier]'你正在獲得具有給定標識符的'IAPProduct'。 – rmaddy

+0

我正在努力與IAPProduct是一個類,爲什麼它被分配一個NSString。通常,NSString被賦值爲:classInstance.someVariable = aString; – user1107173

1

這不是IAPProduct *product= NSMutableDictionary[NSArray.productIdentifier];

類型的skProductSKProduct,不NSArray。快速枚舉​​作爲SKProduct循環遍歷skProducts中的所有元素。

這是(在某種程度上)喜歡使用的循環與反做:

//for (SKProduct * skProduct in skProducts) 
for (int i=0; i<skProducts.count; i++) 
{ 
    SKProduct *skProduct = skProduct[i]; 
    IAPProduct * product = _products[skProduct.productIdentifier]; 
    product.skProduct = skProduct; 
    product.availableForPurchase = YES; 
} 
+0

謝謝。 SKProduct是一個標準的StoreKit類。另一個愚蠢的問題是:我們如何才能爲SKProduct的一個實例分配一個數組的元素? – user1107173