警告:将不兼容的类型传递给setRootViewController:

时间:2011-09-26 17:05:50

标签: ios cocoa-touch uiviewcontroller uideviceorientation

我正在为iPhone做计算器,在设备旋转时,会显示一个新视图,我收到以下三个错误:

  

CalculatorAppDelegate.m:21:警告:不兼容的Objective-C类型'struct CalculatorViewController *',当从不同的Objective-C类型传递'setRootViewController:'的参数1时,预期'struct UIViewController *'

此错误(及以下)来自代码:

self.window.rootViewController = self.viewController;
  

CalculatorAppDelegate.m:警告:语义问题:从'CalculatorViewController *'

分配给'UIViewController *'的指针类型不兼容

以下错误来自:

UIInterfaceOrientation interfaceOrientation = [[object object] orientation];`
  

CalculatorViewController.m:警告:语义问题:从枚举类型'UIDeviceOrientation'到不同枚举类型'UIInterfaceOrientation'的隐式转换

1 个答案:

答案 0 :(得分:3)

对于前2个错误:

  • {。{1}}未在.h文件中声明为CalculatorViewController的子类
  • 或者编译器不知道它,因为你忘记了代码中的UIViewController让编译器知道它的定义

对于您的上一期,这是因为您滥用了#import "CalculatorViewController.h"UIDeviceOrientation,它们的类型不同(甚至非常相关)。

  • UIInterfaceOrientation定义用户界面的方向。它只有4个值:Portrait,Landscape Left,Landscape Right或UpsideDown。
  • UIInterfaceOrientation定义设备的方向。它有6个值,定义您的设备是直线向上,向左或向右旋转90°,颠倒或向下朝上。

如果您设置界面以使其旋转(UIDeviceOrientation仅针对4 shouldAutorotateToInterfaceOrientation:之一返回YES),您的UIInterfaceOrientation仍然可以改变(没有阻止用户将他/她的iPhone转到任何位置),但你的UIDeviceOrientation不会改变。

如果您设置了界面,那么会旋转UIInterfaceOrientation始终返回YES),当用户将他/她的iPhone转向右侧时, {{1} }将是shouldAutorotateToInterfaceOrientation: ,因为iPhone会向右转......而 UIDeviceOrientation将是UIDeviceOrientationLandscapeRight ,因为界面方向将会旋转向左90°,因为设备向右转,界面仍然会水平显示给用户。

您可以注意到UIInterfaceOrientationUIInterfaceOrientationLandscapeLeft反对值(对于两者都相同的枚举;当然对于UIInterfaceOrientation和{{1}没有相应的UIDeviceOrientation