2012-02-08 4 views
1

NSArrayController에 바인딩 된 NSTableview가 있습니다. Table/Arraycontroller는 핵심 데이터 "Person"엔티티를 포함합니다. 사람들은 GUI 사용자에 의해 NSTableview에 추가됩니다. NSTableview 또는 NSArrayController를 반복하여 데이터를 가져옵니다.

는 이제
NSString* Name; 
int Age; 
NSString* HairColor; 

가 지금은 거기에 몇 가지 작업을 수행 할 수있는 어레이 컨트롤러에 저장되는 반복 할 같은 사람의 실체가 보인다 가정 해 봅시다. 제가하고 싶은 실제 작업은 중요하지 않습니다. 나는 정보로 무엇을하려고하는지 정말 싫어합니다. NSArraycontroller에있는 모든 것을 반복하는 것이므로 혼란 스럽습니다. 나는 C++과 C# 배경에서 왔고 코코아를 처음 접했습니다. 앞으로 1 년 동안 nsarraycontroller에서 각 사람을 포함하는 NSMutableArray를 만들고 싶다고 가정 해 봅시다.

그래서 나는 유일한 것은 다시 코드와 같은 일을하고 나를 잡고 위의 Obj-C에 존재하지 않는 foreach 문이 생각

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

foreach(PersonEntity p in myNsArrayController) // foreach doesn't exist in obj-c 
{ 

    Person* new_person = [[Person alloc] init]; 
    [new_person setName:p.name]; 
    [new_person setHairColor:p.HairColor]; 
    [new_person setAge:(p.age + 1)]; 
    [mutArray addObject:new_person]; 

} 

처럼 뭔가를 할 것입니다. 난 그냥 nsarraycontroller를 반복하는 방법을 모르겠다.

참고 :이 그래서 가비지 컬렉션 당신은 fast enumeration 찾고있는

답변

3

에 설정되어 OSX입니다.

for (PersonEntity *p in myNsArrayController.arrangedObjects) 
{ 
    // Rest of your code 
} 
1

처럼 예를 들어

, 뭔가 또한 블록을 사용하여 열거 할 수 있습니다. 예를 들면 다음과 같습니다.

[myNsArrayController enumerateObjectsUsingBlock:^(id object, NSUInteger index, BOOL *stop) 
{ 
     PersonEntity *p = object; 
     // Rest of your code 
}]; 

두 가지 접근 방식 모두 장점과 단점이 있습니다. 다음은이 질문에 대한 답변에서 자세히 설명 : 당신은 애플의 WWDC 2010 비디오에서 블록에 큰 자습서를 찾을 수 있습니다

Objective-C enumerateUsingBlock vs fast enumeration?

. 애플에서 그들은 항상 "블록"을 사용한다고 말한다.

관련 문제