2011-07-28 20 views
2

私は以下のようにNSObjectのを定義している:iPhone:NSObjectの属性をループする方法はありますか?

@interface MFMoodMix : NSObject { 
    NSNumber *m1; 
    NSNumber *m2; 
    NSNumber *m3; 
    NSNumber *m4; 
    NSNumber *m5; 
    NSNumber *m6; 
    NSNumber *m7; 
} 

は最大のものを見つけるために、私はすぐにすべてのこれらの値をループすることができます方法はありますか?例えば(UIView * x in view.subviews)のようなUIViewのように、これを迅速に行う同様のメソッドがありますか?

ありがとう

答えて

5

いいえこれはひどいデザインです。代わりにNSNumbersの配列を使用してください。

@interface MFMoodMix : NSObject { 
    NSArray *ms; 
} 

そしてあなたinit法(または他のどこか)の配列に番号を追加で:

-(id) init 
{ 
    /* ... */ 
    ms = [[NSArray alloc] initWithObjects: 
      [NSNumber ...], 
      [NSNumber ...], nil]; 
    /* ... */ 
} 

がint(s)はある、のNSNumber(複数可)を考えると、単に例を反復処理するには:

int high = 0; /* or a negative number... */ 
/* This is not Python */ 
for (NSNumber *n in ms) 
    if ([n intValue] > high) 
     high = [n intValue]; 
+1

+1は '/ *これはPython * /'ではありません。私は「これはひどいデザインです。 – Perception

+2

-1 'これはひどいデザインです'。なぜならあなたは寝る必要がないからです。 "いいえ、NSNumbersのNSArrayのコレクションをNSNumbersの1つのNSArrayに置き換えることができれば、あなたはそれをループすることができます... 'というのは、攻撃的でなくても意味を持っていたでしょう... – GeneralMike

2

あなたが同じようにアクセスする必要が同様の値のコレクションを持っている場合は、私は単純に目を置くことをお勧めしますあなたに... collection。これらの値をNSArrayに配置すると、それらの値を簡単に繰り返して、どのように並べ替えることができます。 m *接頭辞を維持したい場合は、NSDictionaryの代わりにmの値をキーとして使用できます。

1

あなたが何らかの形で配列にあなたの番号を変換することができないならば、あなたは常にそれを苦労してやると、それについての素晴らしいスレッドがここにそうであり

:-)にObjCランタイムを使用することができます。Objective C Introspection/Reflection

+0

これらのことに没頭する – sidyll

関連する問題