我有一个奇怪的问题。我收到一条错误报告,说该应用程序崩溃与方向更改有关。问题是我还没有在应用程序代码中注册任何方向事件。与方向改变有关的唯一事情是:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return IS_IPAD ? YES : interfaceOrientation == UIInterfaceOrientationPortrait;
}
...在所有视图控制器上确保它在iPad上改变方向而不是iPhone。错误发生在iPhone上。
IS_IPAD来自:
#ifdef UI_USER_INTERFACE_IDIOM
#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#else
#define IS_IPAD (false)
#endif
似乎-[UIWindow _updateInterfaceOrientationFromDeviceOrientation:]
调用了一些不再存在的对象。如果我没有注册任何与方向相关的通知,那会是什么对象?
答案 0 :(得分:-1)
您的堆栈跟踪显示NSNotificationCenter
尝试明显通知对象方向更改。因此,您可能已注册此类对象,但它不再存在,并且在取消分配之前未注册。这可能会导致这样的错误。
答案 1 :(得分:-2)
您弃用的方法已弃用。方法shouldAutorotate
是新的自转支持方法。我尝试了这个,它可以按你的意愿工作:
-(BOOL) shouldAutorotate{
return IS_IPAD ? YES : [self preferredInterfaceOrientationForPresentation] == UIInterfaceOrientationMaskPortrait;
}
希望有所帮助:)