2012-04-25 7 views
0

저는 Objective-C를 매우 새로 도입했습니다. 특정 크기의 이미지 파일을 포함하는 UIImageView를 만드는 메서드를 작성하려고합니다. 의 구현 충돌하는 매개 변수 유형 'setImageViewElements ::::::': 'CGFloat *'(일명 '플로트 *'CGRect를 만들기 위해 메서드 매개 변수에 값을 전달합니다.

- (void)setImageViewElements:(UIImageView *)imageViewName : (NSString *)imageName : (NSInteger)topX : (NSInteger)topY : (NSInteger)imageWidth : (NSInteger)imageHeight 
{ 
    imageViewName = [[UIImageView alloc] initWithFrame:CGRectMake(topX, topY, imageWidth, imageHeight)]; 
    [imageViewName setImage:[UIImage imageNamed:imageName]]; 
    [self.view addSubview:imageView]; 
} 

엑스 코드는 방법이 경고를 던졌습니다 : 여기

내 방법입니다) 'NSInteger'나는 이런 식으로 전화를하고 싶습니다

(일명 'INT') 대 :

[self setImageViewElements:myImageView :@"myImage.png" :150 :532 :112 :82]; 

엑스 코드는 호출이 경고를 던졌습니다 : 호환되지 않는 정수 대 포인터 변환 'int'를 'CGFloat *'유형의 매개 변수 (일명 'float *')로 보냄;

매개 변수를 float, CGFloat 및 int로 변경하려고했지만 동일한 오류가 발생합니다.

도움을 주시면 감사하겠습니다.

감사 모리

답변

2

"충돌 매개 변수 유형을 구현. .. "는 .h 파일의 메서드 서명이 .m 파일의 메서드 서명과 일치하지 않는다고 제안합니다. 아마 .h에 CGFloat을 사용하는 이전 버전이 있습니까?

부연 설명으로 이미지 이름, x, y, 너비 및 높이 인수를 구분하는 대신 "큰"개체와 구조체를 전달하는 것이 어떻습니까?당신은 다음과 같이 호출 할

- (void) setImageViewElements:(UIImageView *)imageViewName 
        withImage:(UIImage *)image 
         inFrame:(CGRect)rect 

: 같은

[self setImageViewElements:myImageView 
       withImage:[UIImage imageNamed:@"myImage.png"] 
        inFrame:CGRectMake(150, 532, 112, 82)]; 

명명 된 매개 변수를 사용하여 일반적으로 너무 좋은 스타일로 생각된다.

0

귀하의 헤더 파일 정의에 당신이 NSInteger이 적어도 하나의 CGFloat *을 가지고이 방법에 대한 선언이 있습니다.

컴파일러가 충돌에 대한 첫 번째 경고에서 불평합니다. 두 번째 경고는 컴파일러가 헤더의 버전을 사용하여 코드를 생성하기 때문에 발생하며 사용자가 CGFloat에 대한 포인터로 정수를 사용한다고 생각합니다. 이는 좋은 생각이 아닙니다.

여기에는 두 가지 문제가 있습니다. 첫째, CGFloat 인 매개 변수는 포인터 일 필요가 없습니다. 그것들은 객체가 아닌 원시 타입입니다. 둘째, 선언과 정의의 충돌. 셋째, 메서드 이름에는 합법적이지만 설정된 스타일과 완전히 반대되는 매개 변수에 대한 레이블이 없으며 읽을 수 없습니다. 세 가지 문제.

선언 :

- (void)prepareImageView:(UIImageView *)imageView withImageName:(NSString *)name originX:(CGFloat)topX originY:(CGFloat)topY width:(CGFloat)width height:(CGFloat)height; 

이 정의는 특히 매개 변수의 유형을 포함하여, 동일한 보이는 있는지 확인합니다.

또한 단지 방법은 CGRect 매개 변수를 사용하여 읽기이 쉽게 만들 수 :

- (void)prepareImageView:(UIImageView *)imageView withImageName:(NSString *)name frame:(CGRect)frame; 

당신이 다음과 같이 부른다 :

[self prepareImageView:myImageView withImageName:@"myImage.png" frame:(CGRect){150, 532, 112, 82}]; 
관련 문제