通过通用应用程序自动旋转获取异常调试日志

时间:2011-09-06 20:14:19

标签: iphone objective-c cocoa-touch ipad uiviewcontroller

我的通用应用程序有以下代码,但是当我运行应用程序时,我得到了这个奇怪的日志。然而,一切似乎都很好。

- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{
    if (NSClassFromString(@"UISplitViewController") != nil && UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
    {
        return YES;
    }
    else
        return NO;
}

在控制台中:

The view controller <UINavigationController: 0x1468d0> returned NO from -shouldAutorotateToInterfaceOrientation: for all interface orientations. It should support at least one orientation.

3 个答案:

答案 0 :(得分:2)

消息说明了一切:

  

它应该支持至少一个方向。

else语句中,NO的返回与方向无关。如果此处NO表示“仅限肖像”,请进行检查并返回YES作为肖像:

else
 return
  (interfaceOrientation == UIInterfaceOrientationPortrait) ?
    YES :
     NO ;

或者更简洁(但不那么擅长)的版本:

else
  return (interfaceOrientation == UIInterfaceOrientationPortrait);

答案 1 :(得分:0)

我认为这意味着你的if条件总是错误的。无论是iPad还是UISplitViewController类,都应始终为纵向或横向返回YES。例如,你的iPhone总是会返回NO。从更像这样的事情开始,然后也许只有blahblah允许景观:

    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
    {
    if (NSClassFromString(@"UISplitViewController") != nil && UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
    {
        return YES;
    }
    else
    {
        // Return YES for supported orientations
        return (interfaceOrientation == UIInterfaceOrientationPortrait) || (interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown);
    }

答案 2 :(得分:0)

我认为你的if条件总是失败,所以你可能总是返回NO,这意味着“我不支持任何方向”,这显然不是真的......什么是你想支持的最低目标?

如果您的else应该处理iPhone / iPod,则应至少在一个方向上返回YES

return (interfaceOrientation == UIInterfaceOrientationPortrait);

或者

return inOrientation == UIDeviceOrientationLandscapeLeft
    || inOrientation == UIDeviceOrientationLandscapeRight
    || inOrientation == UIDeviceOrientationPortrait
    || inOrientation == UIDeviceOrientationPortraitUpsideDown;

如果您打算支持所有方向。

如果您关心支持低于3.2的iOS版本并希望在模拟器上进行测试,您可能需要更改“iPad检查”,就像这样。

- (BOOL)amIAnIPad {
    // This "trick" allows compiling for iOS < 3.2 and testing on pre 3.2 simulators
#if (__IPHONE_OS_VERSION_MAX_ALLOWED >= 30200)
    if ([[UIDevice currentDevice] respondsToSelector: @selector(userInterfaceIdiom)])
        return ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad);
#endif
    return NO;
}

有关此技巧的更多信息,请访问Jeff LaMarche's blog