2012-04-25 6 views
0

Objective-Cの新機能です。私は特定のサイズでイメージファイルを含むUIImageViewを作成するメソッドを記述しようとしています。メソッドパラメータに値を渡して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]; 
} 

Xcodeは方法のため、この警告がスローされます: 'setImageViewElements ::::::' の実装で 競合パラメータの型: 'CGFloat *'(別名 'フロート*' を')NSInteger' 私はこのようにそれを呼び出すしたいと思います

(別名 'INT')対:

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

Xcodeは、コールのためにこの警告がスローされます。 互換性のない整数からポインタへの変換 '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 *を持って、このメソッドの宣言を持っています。

コンパイラは、その競合に関する最初の警告で不平を言っています。 2番目の警告は、コンパイラがヘッダーのバージョンを使用してコードを生成するために発生し、CGFloatへのポインタとして整数を使用することをお勧めします。これはお勧めできません。

ここには2つの問題があります。まず、CGFloatのパラメータはポインタである必要はありません。それらはオブジェクトではなくプリミティブ型です。第二に、宣言と定義の間の葛藤。第三に、あなたのメソッド名は、合法であるが、確立されたスタイルに完全に反し、読みにくいだけのパラメータのラベルが欠けている。 3つの問題。

宣言:

- (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}]; 
関連する問題