Iphone 是否强制转换以指定未知对象类型?
在下面的代码中,我有一个视图对象,它是UIScrollView的一个实例,如果我运行下面的代码,我会收到警告说,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
“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。谢谢你的提示,效果很好。