2013-08-19 88 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)}]; 

    } 

}