2014-09-21 63 views
-2

我有以下方法(它是ShoppingCart实例方法):是否可以在NSMutableDictionary上使用快速枚举?

- (void) showShoppingCartProducts 
{ 
    for (Product *eachProduct in products) 
    { 
     [eachProduct logName] 
    } 
} 

我有另一个方法(它是ShoppingCart实例方法):

- (void) addProduct: (Product *) newProduct { 
    [products objectForKey: newProduct.name]; 
} 

它应该迭代通过中的(NSMutableDictionary *) products

logName做以下(这是Product实例方法):

- (void) logName 
{ 
    NSLog(@"%@", self.name); 
} 

这里是我的main()功能

int main(int argc, const char * argv[]) { 

    ShoppingCart* myShoppingCart = [[ShoppingCart alloc] init]; 

    Product* myProduct = [[Product alloc] init]; 

    myProduct.name = @"My Latest Product"; 

    [myShoppingCart addProduct: myProduct]; 

    [myShoppingCart showShoppingCartProducts]; 

    return 0; 
} 

运行程序后,它会返回0,但不显示任何内容。

是否可以在NSMutableDictionary上使用快速枚举?

+0

你永远不调用'showShoppingCartProducts'。 – 2014-09-21 20:15:04

+0

您不在代码示例中的任何位置使用'showShoppingCartProducts' ...? – bdesham 2014-09-21 20:15:09

+0

而你并没有向我们展示产品是如何声明的,或者它是如何初始化的。 – 2014-09-21 20:16:23

回答

2

此:

注:[myShoppingCart addProduct: myProduct]只是增加(产品)myProduct的到的NSMutableDictionary产品(*的购物)myShoppingCart

不充分的解释。没有这样的东西,“只是将一个对象添加到NSMutableDictionary”。您在字典中为键设置值。哪个是myProduct,价值还是关键?如果是价值,关键是什么?如果它是关键,那么价值是什么?

回答基本问题:是的,您可以快速枚举字典。列举了。如果您需要每个密钥的值,则必须使用-objectForKey:或下标语法来查看该值。

如果您认为您将某个对象添加到字典(或任何其他集合),但字典(集合)似乎是空的,那可能是因为您正在处理一个nil指针而不是实际的集合。您忽略创建集合并存储对它的强烈参考。


你编辑的问题,以显示这一方法:

- (void) addProduct: (Product *) newProduct { 
    [products objectForKey: newProduct.name]; 
} 

这种方法不会将产品添加到字典中。 -objectForKey:查找对象可能已经在其字典中的密钥中。它不会修改字典。你可能打算这样做:

- (void) addProduct: (Product *) newProduct { 
    [products setObject:newProduct forKey:newProduct.name]; 
} 

既然你在添加Product实例字典成功和nameNSString*,你的枚举应该是这样的:

for (NSString* name in products) 
{ 
    Product* product = [products objectForKey:name]; 
    [product logName] 
} 
+0

对不起,我修复了这个错误。我想记录的值是'Products'类实例的'@property NSString * name'(在这个例子中,我有一个:myProduct) – 2014-09-22 01:06:48

+0

因此,NSMutableDictionary没有问题,只是错误的方法?不过,当我使用正确的方法(你给我的)时,结果是一样的。 – 2014-09-22 01:20:55

+0

你确定'products'实例变量(我假设它是一个实例变量)不是'nil'吗?尝试记录它。另外,显示它的设置。这应该在' - [ShoppingCart init]'的实现中。 – 2014-09-22 01:40:18