2012-02-08 4 views
1

NSArrayControllerにバインドされたNSTableviewがあります。 Table/Arraycontrollerには、コアデータ "Person"エンティティが含まれています。人々はGUIのユーザによってNSTableviewに追加されます。NSTableviewまたはNSArrayControllerを反復してデータを取得します。

のは、人の実体が

NSString* Name; 
int Age; 
NSString* HairColor; 

のように見えるとしましょう今、私はそれにいくつかの操作を実行するために、アレイコントローラに保存されているものを反復処理します。私がしたい実際の操作は重要ではありません。私は情報で何をしようとしているのか本当にうまくいきたくありません。 NSArraycontrollerに保持されているすべてのものを反復するだけで、私を混乱させることになります。私はC++とC#のバックグラウンドから来て、Cocoaを初めて使っています。 1年後のnsarraycontrollerの各人物を含むNSMutableArrayを構築したいとしましょう。

だから、私は戻って上記のコードのようなものをやってから私を保持している唯一のものは、foreachのがobj-Cには存在しないということであると考えてい

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

両方のアプローチの長所と短所があります。これらは、この質問への回答で詳しく説明されています

Objective-C enumerateUsingBlock vs fast enumeration?

あなたがAppleのWWDC 2010のビデオでブロックに大きなチュートリアルを見つけることができます。その点で、彼らはAppleで「いつも」ブロックを使用していると言います。

関連する問題