Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 是否强制转换以指定未知对象类型?_Iphone_Objective C_Cocoa Touch - Fatal编程技术网

Iphone 是否强制转换以指定未知对象类型?

Iphone 是否强制转换以指定未知对象类型?,iphone,objective-c,cocoa-touch,Iphone,Objective C,Cocoa Touch,在下面的代码中,我有一个视图对象,它是UIScrollView的一个实例,如果我运行下面的代码,我会收到警告说,“UIView可能不会响应-setContentSize等。” 我已经检查了对象的类型,[self view]确实是一个UIScrollView。我猜这只是编译器对类型的错误猜测,而解决方案只是手动将对象转换为正确的类型,对吗 UIScrollView *scrollView = (UIScrollView *)[self view]; UIImage *image = [UIIma

在下面的代码中,我有一个视图对象,它是UIScrollView的一个实例,如果我运行下面的代码,我会收到警告说,
“UIView可能不会响应-setContentSize等。”

我已经检查了对象的类型,
[self view]
确实是一个
UIScrollView
。我猜这只是编译器对类型的错误猜测,而解决方案只是手动将对象转换为正确的类型,对吗

UIScrollView *scrollView = (UIScrollView *)[self view];

UIImage *image = [UIImage imageNamed:@"Snowy_UK.jpg"];
imageView = [[UIImageView alloc] initWithImage:image];
[[self view] addSubview:imageView];
[scrollView setContentSize:[image size]];
[scrollView setMaximumZoomScale:2.0];
[scrollView setMinimumZoomScale: [scrollView bounds].size.width / [image size].width];

为Gary干杯。

如果您在自己的类中定义了实例变量,当然可以将其声明为:
UIScrollView*视图在类定义中。如果您对另一个类进行了子类化,该类具有
UIView*view
在定义中(我猜这里就是这种情况),那么上面的方法可能是满足编译器要求的最佳方法


您可能还想添加一个断言来检查此时的视图类,以便在出现错误时得到合理的错误消息。

如果您在自己的类中定义了实例变量,当然可以将其声明为:
UIScrollView*视图在类定义中。如果您对另一个类进行了子类化,该类具有
UIView*view
在定义中(我猜这里就是这种情况),那么上面的方法可能是满足编译器要求的最佳方法


您可能还希望添加一个断言来检查该点上的视图类,这样,如果出现问题,您将得到一条合理的错误消息。

UIScrollView继承了UIView,因此将调用更改为类似以下内容应该可以:

[self addSubview:imageView];

UIScrollView继承了UIView,因此将调用更改为类似以下内容应该可以:

[self addSubview:imageView];

编译器不会猜测类型,而是使用您声明的类型。self.view必须是UIView,这就是为什么在尝试设置ContentSize时会收到警告,因为您声明该视图是UIView


当您强制转换时,您会告诉编译器,这实际上是一个UIScrollView,因此它不再给出警告。如果始终都是UIScrollView,那么应该将view属性声明为UIScrollView。

编译器不会猜测类型,而是使用您声明的类型。self.view必须是UIView,这就是为什么在尝试设置ContentSize时会收到警告,因为您声明该视图是UIView


当您强制转换时,您会告诉编译器,这实际上是一个UIScrollView,因此它不再给出警告。如果它一直都是UIScrollView,那么您的view属性应该声明为UIScrollView。

Hi Mark,我在IB中设置了一个UIViewController,删除了该视图,并将其替换为UIScrollView。当我要将文件所有者重新连接到新的UIScrollView时,我必须使用view,这就是为什么编译器后来认为它是视图而不是scrollView。谢谢你的提示,效果很好。嗨,马克,我在IB中设置了一个UIViewController,删除了视图,并用UIScrollView替换了它。当我要将文件所有者重新连接到新的UIScrollView时,我必须使用view,这就是为什么编译器后来认为它是视图而不是scrollView。谢谢你的提示,效果很好。