2010-06-22 2 views
3

참조하십시오 코멘트 :objective-c 메시징을 통해 C 스타일 객체 배열에 액세스하기위한 올바른 구문은 무엇입니까?

static void drawAnObject() { 
    Form *form = [[Form alloc] init]; 
    int i; 

    [form randomizeCube]; 
    glColor3f(0.0, 0.0, 0.0); 

    for(i = 0; i < MAX_CUBE; i++) { 
     glutWireCube(form->cube[i]->size); 
      //compiler issues hard warning because form->cube is protected!! 
    } 
} 

차라리 내가 오히려 같은 것을 쓸 수 나는 "양식"클래스에 배치 된 접근을 사용 :

glutWireCube([[form cube][i] size]); 

을하지만 나는 "로 변환 할 수 없습니다 수 포인터 유형 "오류가 발생할 수 있습니다. 다음

@interface Form : NSObject <NSCopying> { 
    Cube *cube[MAX_CUBE]; 
} 

:

@implementation Form 
- (Cube *) cube { 
    return *cube; 
} 

은 다음 변수 "큐브"가 "양식"클래스의 헤더 파일에 정의 된대로 :

이는 "양식"클래스 내 접근입니다 헤더 파일에 정의 된 "Cube"클래스 변수입니다.

@interface Cube : NSObject <NSCopying> { 
    double size; 
    double positionX; 
    double positionY; 
    double positionZ; 
} 

... 및 해당 액세서 그가 구현 (하는 .m) 파일 : 나는 나중에 포트에 비 코코아 플랫폼 프로젝트의 코드의이 부분을 계획 할 NSArray를 O를있는 NSMutableArray를 사용하지

- (double) size { 
    return size; 
} 

- (void) setSize: (double) newSize { 
    size = newSize; 
} 

- (double) positionX { 
    return positionX; 
} 

- (void) setPositionX: (double) newPositionX { 
    positionX = newPositionX; 
} 

- (double) positionY { 
    return positionY; 
} 

- (void) setPositionY: (double) newPositionY { 
    positionY = newPositionY; 
} 

- (double) positionZ { 
    return positionZ; 
} 

- (void) setPositionZ: (double) newPositionZ { 
    positionZ = newPositionZ; 
} 

싶습니다.

나는 올바른 방법을 찾기 위해 지난 두 시간을 보냈습니다. C-Style 배열과 Objective-C 접근자를 사용하여이를 수행하는 "올바른 방법"이 있습니까?

답변

1

접근 방법에 별표가 없습니다. C 또는 Objective-C의 메서드에서 배열 유형을 반환 할 수 없으므로 까다로운 작업입니다.

@implementation Form 
- (Cube **) cube { 
    return &cube[0]; // alternatively just "return cube;" will suffice 
} 
@end 

이 포인터에 대한 포인터를 반환, 그래서 당신은 [form cube][i] 함께 첨자 때 당신은 여전히 ​​포인터 타입이어야 포인터 타입 왼쪽, 그리고 오브젝티브 C 수신기에있는이보십시오. 이 작업을 수행 할 수 있어야합니다.

glutWireCube([[form cube][i] size]); 
+0

신속한 답변 주셔서 감사합니다. 나는 이것을 시도하고 나의 발견을 게시 할 것이다. – Rafael

+0

해결되고 이해됩니다. 감사. – Rafael