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 为该方法抛出此警告: Conflicting parameter types in implementation of 'setImageViewElements::::::': 'CGFloat *' (aka 'float *') vs 'NSInteger' (aka 'int')

我想这样称呼它:

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

Xcode 为调用抛出此警告:不兼容的整数到指针转换将 'int' 发送到类型为 'CGFloat *' (aka '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 *您的头文件有此方法的声明,该声明在您的定义中至少有一个NSInteger.

编译器在关于该冲突的第一个警告中抱怨。第二个警告是因为编译器正在使用标头中的版本来生成代码,并且它认为您希望它使用整数作为指向 a 的指针CGFloat,这不是一个好主意。

这里有两个问题。首先,CGFloats 的参数不需要是指针。这些是原始类型,而不是对象。二是声明与定义的冲突。第三,您的方法名称缺少参数标签,这是合法的,但与既定风格完全相反,而且很难阅读。三个问题。

宣言:

- (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 回答