2014-02-25 27 views
1

下面是我的代碼。當循環播放NSArrayNSDictionary對象並試圖追加到數組時,我保留顯示正確結果的NSLog,但結果NSArray只包含最後一條記錄。將NSString附加到NSArray時只獲取一個值

for (NSDictionary *entry in entries) { 
    NSString* projID = [entry objectForKey:@"NM_PROJECT"]; 
    NSArray *projectNames = [[NSArray alloc] initWithObjects:projID,nil]; 
    _projectpicker.delegate = self; 
    _projectpicker.dataSource = self; 

    NSLog(@"Error : %@", projID); 
} 

登錄結果: Test1的 test2的 TEST3 TEST4

當追加到NSArray(Projectnames)我得到最後的數據..

回答

1

設置:

_projectpicker.delegate = self; 
_projectpicker.dataSource = self; 

一個循環中沒有太大的意義。您不需要多次執行此操作。

而其他的答案准確地描述你正在做錯誤的數組是什麼,您的當前需求,可以更簡潔地使用KVC實現:

NSArray *projectNames = [entries valueForKey:@"NM_PROJECT"]; 

(那麼你並不需要自己的循環可言)

+0

你能更詳細Wain –

+0

謝謝你Wain ..它描述了我很多..謝謝你的幫助 –

3

保持alloc聲明的外部for循環和使用一個NSMutableArray,然後繼續添加到這個數組,當需要時在for循環中。

NSMutableArray *projectNames = [[NSMutableArray alloc] init]; 
for(...) 
{ 
    [projectNames addObject: anyObject]; 
} 
+0

Vikram感謝您的快速響應,但它是一個Picker視圖,其中一個下拉名稱是projectNames,它是NSarray。所以我不能再修改NSmutuable陣列.. –

+0

謝謝Vikram即使你在一定程度上幫助我 –

5

每次每個循環迭代初始化新數組時,都不會將新對象添加到數組中。 要做到這一點,你必須循環之前創建的NSMutableArray並添加內循環對象:

NSMutableArray *projectNames = [[NSMutableArray alloc] init]; 
for (NSDictionary *entry in entries) { 
      NSString* projID = [entry objectForKey:@"NM_PROJECT"]; 
      [projectNames addObject: projID]; 
      _projectpicker.delegate = self; 
      _projectpicker.dataSource = self; 
      NSLog(@"Error : %@", projID); 
} 
NSLog(@"Array : %@", projectNames); 
+0

格雷格感謝您的快速響應,但它是一個Picker視圖,其中一個下拉名稱是projectNames這是NSarray。所以我不能再修改NSmutuable數組.. –

+0

枚舉後,您可以將NSMutableArray轉換爲NSArray。您不能將對象添加到NSArray。 – Greg

+0

您不需要轉換。可變數組是一種數組。如果你想確保它是不可變的,只需做'[projectNames複製]' – Wain