2014-03-29 2 views
1

내 코드에있는 UIView 배열을 만들지 못한다. 체스 판을 만들었고 각 사각형은 UIView입니다.UIView 배열 만들기

for (int i=0; i<64; i++) 
    squares[i] = [ [ChessSquareView alloc] initWithFrame:sq]; 

곳 -이 같은 for 루프에서 64 개 사각형 각각에 대한 뷰를 작성하고있는하는 .m 파일에서

@interface ChessViewController : UIViewController 
{ 
    ChessSquareView *squares[64]; 
} 

- 내의 UIViewController 클래스 선언에서 나는 다음과 같은이 sq은 해당 사각형에 대한 위치 및 크기 (CGRect)입니다. ChessSquareView.m 파일에서 변수에 CGRect을 저장합니다. 내가 올바른 값을 추가하고 있는지 확인하기 위해 initWithFrame 함수에서 인쇄하고 있습니다.

나중에 코드 (예 : touchEnded 함수)에서 뷰 배열을 반복하고 객체가 모두 잘못되었음을 알 수 있습니다. UIView 배열을 만드는 올바른 방법은 무엇입니까?

편집 :

나는 사용자가 탭 위치를 파악하는 견해 통해 반복하고있는 touchEnded 기능에 명확히합니다. 그 기능에서 나는 NSStringFromCGRect 기능을 사용하여 각보기에 대해 frame을 인쇄하고 모두 잘못되었습니다. .H에서

for (int i=0; i<25; i++) 
{ 
    NSLog(@"Checking Square %@", NSStringFromCGRect([squares[i] frame])); 

} 
+0

1. UIView가 올바르게 배치 되나요? 당신이 그들을 추가 할 때 UIView의 backgroundColor 속성에 임의의 색상을 넣어보십시오 & 이것을 먼저보십시오. 2. 먼저 UIView의 좌표계로 위치를 변환해야합니다. – nsuinteger

+0

@nsuinteger - UIView가 올바르게 배치됩니다. 나는 배열 창조 문제를 확신하면서 질문을 변경했다. – user220201

+1

C 배열이 아닌 NSArray를 사용하십시오. NSArray는 객체를위한 것이다. 그것은 접근과 조작을위한 유용한 방법을 가지고 있으며, 메모리는 올바르게 관리됩니다. – matt

답변

0

:

@property (nonatomic, strong) NSMutableArray *squares; 

다른 사람처럼하는 .m

self.squares = [[NSMutableArray alloc] init]; 

for(int i = 0; i < 64; i++) 
{ 
    ChessSquareView *v = [[ChessSquareView alloc] initWithFrame:sq]; 
    [self.squares addObject:v]; 
} 
+0

속성을 사용하여 변수를 생성하는 것과 내가 직접 선언 한 것과 (NSMutableArray를 작성했다고 가정하고) 직접 선언하는 것의 차이점은 무엇입니까? 또한 나는 문서를 읽고 그것을 철회하는 방법을 알아낼 것이다. – user220201

+0

이것은 배열을 만드는 목적에 불과합니다. 내가 C 방법을 시도하고 그것은 NSMutableArray (또는 NSArray)와 같은 방법 중 하나에 응답하지 않는 것 같습니다. 이 경우 Objective-C 객체를 사용하는 것이 가장 안전하다고 생각합니다. 특히 ARC를 사용하는 경우 모든 메모리 관리가 처리됩니다. – jancakes

+0

아, 내가 속성으로 만들면 자동으로 메모리 관리가 수행됩니까? – user220201

0

에서, 나는 C 배열보다는있는 NSMutableArray를 사용하는 것이 좋습니다 것입니다. 여전히 C 배열이 작동해야합니다.

그러나 게시 한 코드는 모든보기의 프레임에 대해 동일한 값을 사용하고 있습니다. 모두 겹쳐 야합니다. (사각형 사각형을 계산하는 코드를 생략하지 않았다면 문제를 알아내는 것이 중요하기 때문에 코드를 표시하십시오.)

왜 각보기에 태그를 지정하지 않습니까? , 내가 사용? 뷰가 어떻게 든 뒤죽박죽이되어 보이는지 알 수 있습니다.

+0

다른 사람들이 제안한 것처럼 NSMutableArray를 사용하도록 코드가 변경되었습니다. 모든 뷰에 대해 동일한 CGRect를 추가하지는 않습니다. 또한 보드가 올바르게 렌더링 된 것을 볼 수 있습니다. 그래서 문제는 배열 생성에 있습니다. 객체에 대한 C 배열을 만들 수없는 이유는 무엇입니까? 더 그렇다면 NSArray 또는 NSMutableArray를 사용하지 않고 객체 배열을 만드는 방법이 있습니까? – user220201