2011-07-28 1 views
2

는 I는 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 (들)이다는의 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은'/ * 이것은 파이썬 * /'이 아닙니다. 나는 '이것은 끔찍한 디자인'이라는 또 다른 +1을 주겠다. – Perception

+2

-1 '이것은 끔찍한 디자인입니다', 왜냐하면 당신은 샤워가 필요 없기 때문입니다. "아니,하지만 NSNumbers의 컬렉션을 NSNumbers의 단일 NSArray로 대체 할 수 있다면 그걸 통해 반복 할 수 있습니다 ... '라고 말하면서 불쾌감을주지 않으면 서 포인트를 얻었을 것입니다 .. – GeneralMike

2

, 나는 일을 배치 단순히 추천 할 것입니다 안에 들어가 ... collection. 이 값을 NSArray에 배치하면 쉽게 반복하고 원하는 방식으로 정렬 할 수 있습니다. m * 접두어를 유지하려면 NSDictionary을 대체하고 키로 m 값을 사용할 수 있습니다. 어떻게 든 배열에 숫자를 변환 할 수없는 경우

1

, 당신은 그것에 대해 좋은 스레드가 그래서 여기가 그 어려운 방법을하고

도 :-) objc 런타임을 사용하여 항상 수 : Objective C Introspection/Reflection

+0

Ah nice nice. +1 항상 흥미 롭습니다. 이 일들에 뛰어 들기. – sidyll