2014-02-25 3 views
1

아래 코드는 제 코드입니다. NSArray의 객체가 NSDictionary 인 객체를 반복하고 배열에 추가하려고하면 NSLog이 올바른 결과를 표시하지만 결과는 NSArray이고 마지막 레코드 만 포함됩니다.NSString에 NSString을 추가 할 때 하나의 값만 가져 오기

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을 루프를 사용하기 위해 외부 alloc 문을 계속

답변

1

설정 : 루프 내부

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

훨씬 이해가되지 않습니다를 는 루프 전에있는 NSMutableArray를 만들고 루프 내에서 개체를 추가해야 할 일. 여러 번 할 필요가 없습니다.

다른 답변이 정확하게 배열로 잘못 무슨 일을하는지 설명하면서, 현재의 요구 사항은 KVC 사용하여 더 간결하게 달성 할 수있다 : 당신은 전혀 자신의 루프가 필요하지 않습니다

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

을 ()

+0

좀 더 정교 할 수 있을까. Wain –

+0

Wain .. 그게 내게 많은 것을 설명해 주었다. –

3

TEST4

NSArray (Projectnames) 나는 마지막 데이터를 얻고 있었다에 추가 TEST2 TEST3 .. a NSMutableArray 그리고 나서 for 루프 내부에서 필요할 때이 배열에 계속 추가하십시오.

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

Vikram 빠른 응답 주셔서 감사하지만 피커보기 및 드롭 다운 이름 중 하나는 NSNray입니다 projectNames입니다. 그래서 NSmutuable 배열을 다시 수정할 수 없습니다. –

+0

감사합니다 Vikram조차도 어느 정도까지 나를 도왔습니다 –

5

새로운 루프를 반복 할 때마다 새 객체를 배열에 추가하지 않습니다.

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

그렉 빠른 응답 주셔서 감사하지만 그것은 피커보기 및 드롭 다운 이름 중 하나는 NSArray입니다 projectNames입니다. 그래서 NSmutuable Array를 다시 수정할 수 없습니다 .. –

+0

열거 형 뒤에 NSMutableArray를 NSArray로 변환 할 수 있습니다. NSArray에 객체를 추가 할 수 없습니다. – Greg

+0

변환 할 필요가 없습니다. 가변 배열은 배열 유형입니다. 만약 당신이 그것을 불변으로하고 싶다면, 그냥'[projectNames copy]'를해라. – Wain

관련 문제