Macos 在NSTableview或NSArrayController上迭代以获取数据

Macos 在NSTableview或NSArrayController上迭代以获取数据,macos,cocoa,core-data,nstableview,nsarraycontroller,Macos,Cocoa,Core Data,Nstableview,Nsarraycontroller,我有一个绑定到NSArrayController的NSTableview。表/阵列控制器包含核心数据人实体。GUI的用户将这些人员添加到NSTableview中 假设一个人实体看起来像 NSString* Name; int Age; NSString* HairColor; 现在我想迭代存储在数组控制器中的内容,以在其中执行一些操作。我想做的实际操作并不重要,我真的不想陷入我试图用信息做的事情中。它只是对NSArraycontroller中保存的所有内容进行迭代,这让我很困惑。我来自C++和

我有一个绑定到NSArrayController的NSTableview。表/阵列控制器包含核心数据人实体。GUI的用户将这些人员添加到NSTableview中

假设一个人实体看起来像

NSString* Name;
int Age;
NSString* HairColor;
现在我想迭代存储在数组控制器中的内容,以在其中执行一些操作。我想做的实际操作并不重要,我真的不想陷入我试图用信息做的事情中。它只是对NSArraycontroller中保存的所有内容进行迭代,这让我很困惑。我来自C++和C背景,我对可可很陌生。假设我想构建一个NSMutableArray,在未来1年内包含来自nsarraycontroller的每个人

所以我想做一些类似的事情

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

}
for (PersonEntity *p in myNsArrayController.arrangedObjects)
{
    // Rest of your code
}
我相信唯一阻碍我做类似上面代码的事情是foreach在Obj-c中不存在。我只是不知道如何迭代nsarraycontroller

注意:这是针对OSX的,所以我打开了您要查找的垃圾收集功能

举个例子,比如

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

}
for (PersonEntity *p in myNsArrayController.arrangedObjects)
{
    // Rest of your code
}
你在找我

举个例子,比如

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

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

也可以使用块进行枚举。例如:

[myNsArrayController enumerateObjectsUsingBlock:^(id object, NSUInteger index, BOOL *stop)
 {
       PersonEntity *p = object;
       // Rest of your code
 }];
这两种方法都有利弊。在对该问题的回答中对这些问题进行了深入讨论:


你可以在苹果的WWDC 2010视频中找到关于积木的精彩教程。因为他们说在苹果,他们一直在使用块。

你也可以使用块枚举。例如:

[myNsArrayController enumerateObjectsUsingBlock:^(id object, NSUInteger index, BOOL *stop)
 {
       PersonEntity *p = object;
       // Rest of your code
 }];
这两种方法都有利弊。在对该问题的回答中对这些问题进行了深入讨论:

你可以在苹果的WWDC 2010视频中找到关于积木的精彩教程。因为他们说在苹果,他们一直在使用积木