我有一个绑定到NSArrayController的NSTableview。 Table / Arraycontroller包含核心数据“Person”实体。 GUI的用户将人员添加到NSTableview。
让我们说一个人实体看起来像
NSString* Name;
int Age;
NSString* HairColor;
现在我想迭代存储在数组控制器中的内容以在其中执行某些操作。我想要做的实际操作并不重要我真的不想陷入我想要处理的信息中。它只是迭代在NSArraycontroller中保存的所有内容让我感到困惑。我来自C ++和C#背景,是Cocoa的新手。假设我想在未来1年内构建一个NSMutableArray,其中包含来自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];
}
我相信唯一阻止我做上述代码的事情就是在Obj-c中不存在foreach。我只是没有看到如何迭代nsarraycontroller。
注意:这是针对OSX的,所以我打开了垃圾收集
答案 0 :(得分:3)
您正在寻找fast enumeration。
对于您的示例,例如
for (PersonEntity *p in myNsArrayController.arrangedObjects)
{
// Rest of your code
}
答案 1 :(得分:1)
您还可以使用块枚举。例如:
[myNsArrayController enumerateObjectsUsingBlock:^(id object, NSUInteger index, BOOL *stop)
{
PersonEntity *p = object;
// Rest of your code
}];
两种方法都有利弊。在这个问题的答案中深入讨论了这些问题:
Objective-C enumerateUsingBlock vs fast enumeration?
您可以在Apple的WWDC 2010视频中找到关于块的精彩教程。因为他们说在Apple,他们“一直”使用块。