0

私はObjective-Cを初めて使用します。特定のサイズの画像ファイルを含むUIImageViewを作成するメソッドを作成しようとしています。

これが私の方法です:

- (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 *'(別名'float *')と'NSInteger'(別名'int')の実装でパラメータータイプが競合しています

私はそれをこのように呼びたいです:

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

Xcodeは、呼び出しに対して次の警告をスローします。互換性のない整数からポインタへの変換で、「int」をタイプ「CGFloat *」(別名「float *」)のパラメータに送信します。

パラメータをfloat、CGFloat、intに変更しようとしましたが、同じバリエーションのエラーが発生します。

どんな助けでもいただければ幸いです。

ありがとうモーリー

4

2 に答える 2

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)];

名前付きパラメーターを使用することも、一般的に良いスタイルと考えられています。

于 2012-04-25T02:40:14.320 に答える
0

ヘッダー ファイルには、このメソッドの宣言がCGFloat *あり、定義内の場所が少なくとも 1 つありますNSInteger

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

ここには 2 つの問題があります。まず、 s であるパラメーターは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}];
于 2012-04-25T02:37:17.293 に答える