2012-02-08 51 views
1

我有一個NSTableview綁定到NSArrayController。表/數組控制器包含核心數據「人」實體。人們被GUI用戶添加到NSTableview。迭代NSTableview或NSArrayController獲取數據

比方說,一個人的實體看起來像

NSString* Name; 
int Age; 
NSString* HairColor; 

現在我要遍歷什麼是存儲在陣列控制器在它執行某些操作。我想要做的實際操作並不重要,我不想陷入自己想要處理的信息中。它只是遍歷NSArray控制器中所有讓我困惑的事情。我來自C++和C#背景,是Cocoa的新成員。比方說,我想在未來1年內構建一個包含來自nsarraycontroller的每個人的NSMutableArray。

所以我希望做這樣的事情

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]; 

} 

我認爲唯一抱着我從做類似的代碼回以上是在的foreach對象 - 不存在。我只是看不到如何迭代nsarraycontroller。

注:這是OSX所以我有垃圾收集打開

回答

3

您正在尋找fast enumeration

對於你的榜樣,像

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 
}]; 

這兩種方法都存在親和缺點。這些深入的討論回答這個問題:

Objective-C enumerateUsingBlock vs fast enumeration?

你可以在蘋果的WWDC 2010條上的視頻塊一個偉大的教程。他們說,在蘋果公司,他們一直使用「塊」。

相關問題