Итерация по NSTableview или NSArrayController для получения данных - PullRequest
1 голос
/ 08 февраля 2012

У меня есть NSTableview, который связан с NSArrayController.Table / Arraycontroller содержит базовые данные «Персона».Люди добавляются в NSTableview пользователем GUI.

Скажем, сущность человека выглядит как

NSString* Name;
int Age;
NSString* HairColor;

Теперь я хочу перебрать то, что хранится в контроллере массива, чтобы выполнить в нем некоторую операцию.Фактическая операция, которую я хочу сделать, не важна, я действительно не хочу увязнуть в том, что я пытаюсь сделать с информацией.Это просто перебирает все, что хранится в NSArraycontroller, что меня смущает.Я родом из C ++ и C # и новичок в Какао.Допустим, я хочу создать NSMutableArray, который будет содержать каждого человека из nsarraycontroller на 1 год в будущем.

Так что я бы хотел сделать что-то вроде

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 не существует в Obj-c.Я просто не вижу, как перебирать nsarraycontroller.

Примечание: это для OSX, поэтому у меня включена сборка мусора

Ответы [ 2 ]

3 голосов
/ 08 февраля 2012

Вы ищете быстрое перечисление .

Например, что-то вроде

for (PersonEntity *p in myNsArrayController.arrangedObjects)
{
    // Rest of your code
}
1 голос
/ 08 февраля 2012

Вы также можете перечислять, используя блоки. Например:

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

Есть плюсы и минусы обоих подходов. Они подробно обсуждаются в ответе на этот вопрос:

Перечисление Objective-CUsingBlock против быстрого перечисления?

Вы можете найти отличное руководство по блокам в видео Apple WWDC 2010. В том, что они говорят, что в Apple они используют блоки "все время".

...