2013-08-19 55 views
0

这里是我的代码:对象换下现有对象数组,而不是被添加

​​3210

而不是让这些值:

{ 
     iRate = 1; 
     iRatingId = 1; 
    }, 
     { 
     iRate = 5; 
     iRatingId = 2; 
    }, 
     { 
     iRate = 2; 
     iRatingId = 3; 
    } 

我得到这些值:

{ 
     iRate = 2; 
     iRatingId = 3; 
    }, 
     { 
     iRate = 2; 
     iRatingId = 3; 
    }, 
     { 
     iRate = 2; 
     iRatingId = 3; 
    } 

当我记录每次迭代的结果时,最后一个对象将替换所有现有对象并为其自身添加一个新对象。

回答

2

移动这一行:

NSMutableDictionary *eachRating = [[NSMutableDictionary alloc] init]; 

下面这一行:

for (UIView *subview in self.rateServiceView.subviews) { 

这样,你”将创建一个新的“eachRating“字典,您将添加到”ratings“阵列中。

+0

太棒了!它现在工作正常。非常感谢!我会牢记这一点:) –

1

是的,这是因为您正在为同一个键分配不同的值,因此新值会替换该键的oldvalue。

因此改变你的代码:

NSMutableArray *ratings = [[NSMutableArray alloc] init]; 
    for (UIView *subview in self.rateServiceView.subviews){ 

     if ([subview isKindOfClass:[RSTapRateView class]]) { 

      NSMutableDictionary *eachRating = [[NSMutableDictionary alloc] init]; 


      RSTapRateView *rs = (RSTapRateView *)subview; 
      [eachRating setObject:rs.rateId forKey:@"iRatingId"]; 
      [eachRating setObject:[NSNumber numberWithInt:rs.rating] forKey:@"iRate"]; 

      [ratings addObject:eachRating]; 

     } 

    } 
+0

+1你NISHANT,因为你真的很难努力赢得这个复选标记。 :-) –

+0

@MichaelDautermann最初我告诉了问题的原因,但后来我想给他提供完整的解决方案。 –

0

如果你不需要单独的字典进一步易变性这个循环之后,你可以得到多一点现代的和紧凑通过写这样的:

NSMutableArray *ratings = [[NSMutableArray alloc] init]; 

for (UIView *subview in self.rateServiceView.subviews) { 

    if ([subview isKindOfClass:[RSTapRateView class]]) { 

     RSTapRateView *rs = (RSTapRateView *)subview; 
     [ratings addObject:@{@"iRatingId":rs.rateId, @"iRate":@(rs.rating)}]; 

    } 

}