我正在为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'的隐式转换
答案 0 :(得分:3)
对于前2个错误:
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°,因为设备向右转,界面仍然会水平显示给用户。
您可以注意到UIInterfaceOrientation
和UIInterfaceOrientationLandscapeLeft
有反对值(对于两者都相同的枚举;当然对于UIInterfaceOrientation
和{{1}没有相应的UIDeviceOrientation
)