我们将有一种特定类型的视图控制器发送方法到特定类型的UIVIEw,其中UIVIEw本身由许多其他视图组成.
该视图应具有丰富的特定于域的界面,允许控制器在其与类似的丰富模型之间进行 *** 作.
所以我们覆盖控制器的vIEw属性,如下所示:
@interface PlaybackVIEwController : UIVIEwController<StageLayoutDelegate,ControlPanelDelegate>{ NSMutableArray* _sections; lightingMode _lightingMode;}@property (nonatomic,strong) PlaybackVIEw* vIEw; // <------ Specific type of vIEw#pragma mark - injected@property (nonatomic,strong) ID<OscclIEnt> oscclIEnt;@property (nonatomic,strong) AbstractStageLayoutVIEw* stageLayoutVIEw;@end
OvverrIDing对于定义另一个访问器是有意义的,我只需将消息发送到特定类型的UIVIEw而无需强制转换.
问题:唯一的问题是它会导致编译器警告:
属性类型’PlaybackVIEw *’与从’UIVIEwController’继承的类型’UIVIEw *’不兼容
. .我喜欢构建没有任何警告的代码.这样,有效的警告不会被埋没在其他警告之中.
题:
>有没有办法压制这个特别的警告?
>为什么这是默认设置的一部分,当大多数现代OO语言很乐意允许覆盖子类中的属性或方法,以便它返回超类中声明的类型的更具体的子类?
所以这…
@class PlaybackVIEw;@interface PlaybackVIEwController : UIVIEwController@property (nonatomic,strong) PlaybackVIEw* vIEw;@end
会给你提到上面提到的警告,因为编译器无法知道PlaybackVIEw的继承层次结构. UIVIEwController有一个契约,从它的vIEw属性提供一个UIVIEw
它告诉你,它认为PlaybackVIEw不是UIVIEw
这里的简单解决方案是使用#import代替编译器完全了解PlaybackVIEw …
#import "PlaybackVIEw.h"@interface PlaybackVIEwController : UIVIEwController@property (nonatomic,strong) PlaybackVIEw* vIEw;@end
或者(但由于PCH是一种优化功能并且不应该管理依赖性,因此形式非常糟糕)是将#import“PlaybackVIEw.h”添加到您的项目PCH中
总结以上是内存溢出为你收集整理的ios – 使用特定类型覆盖UIViewController.view全部内容,希望文章能够帮你解决ios – 使用特定类型覆盖UIViewController.view所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)