UIActionSheet崩溃的iPad /不是iPhone

问题描述:

当我看在控制台中我得到这个消息UIActionSheet崩溃的iPad /不是iPhone

 
2010-09-18 17:04:05.284 Wasted Time[8998:207] *** Assertion failure in -[UIActionSheet showInView:], /SourceCache/UIKit_Sim/UIKit-1145.66/UIAlert.m:7073 
2010-09-18 17:04:05.286 Wasted Time[8998:207] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: view != nil' 
2010-09-18 17:04:05.286 Wasted Time[8998:207] Stack: (
    42272848, 
    43430700, 
    42010379, 
    811796, 
    3796273, 
    3862560, 
    9631, 
    3616645, 
    3688229, 
    3682846, 
    3690662, 
    3686119, 
    4983946, 
    71264534, 
    71263781, 
    71207378, 
    71206706, 
    3003734, 
    3030334, 
    3011831, 
    3043800, 
    51265916, 
    41552028, 
    41547944, 
    3002913, 
    3036018, 
    8314 
) 
terminate called after throwing an instance of 'NSException' 

的代码如下:

- (void)viewDidLoad { 
    BOOL continueYesNo; 
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
    continueYesNo = [prefs boolForKey:@"keyContinueMeeting"]; 
    if (continueYesNo) { 
     NSString *message_continue = [[NSString alloc] initWithFormat:@"Do you want to Continue the Prior Meeting"]; 
     UIActionSheet *actionSheet = [[UIActionSheet alloc] 
      initWithTitle:message_continue 
      delegate:self 
      cancelButtonTitle:@"Reset" 
      destructiveButtonTitle:@"Continue" 
      otherButtonTitles:nil]; 
     [actionSheet showInView:self.view]; 
     [actionSheet release]; 
     [message_continue release]; 
    } 
} 

运行良好无论是在iPhone和在iPhone模拟器,但在iPad模拟器中崩溃。

错误消息说:

无效的参数并不令人满意:查看=零

从该行可能的:

[actionSheet showInView:self.view]; 

既然你说这个工程对iPhone,但而不是iPad,这意味着iPad进入这条线所需的代码路径可能与iPhone到达这条线所需的代码路径不同。这意味着视图控制器的view属性可能没有为iPad设置。

我的猜测:你忘了在Interface Builder中为这个视图控制器正在使用的xib的iPad版本连接view插座。

+0

感谢,这使得有很大的意义,但是我没有单独的NIB文件的iPad版本在应用程序的先前版本中,我使用了命令 - >项目,升级当前目标的iPad。 – 2010-09-18 21:28:02

+0

那么,你的错误信息表明一个断言是从'[UIActionSheet showInView:]'提出的,因为'self.view'是'nil'。为什么它是'nil'?从那里开始并工作。 – 2010-09-18 21:46:37

+0

谢谢!我为TabView控制器中的3个TabView中的每一个创建了新的XIB。允许我创建一个更好的iPad界面..你的问题让我朝着正确的方向前进......然而,当我为iPad版本创建新的XIB并将它们连接到mainwindow-ipad.xib(TabViewController)时,我现在得到一个新的/不同的运行时错误将为此发布一个新问题。 – 2010-09-18 23:42:36

这样做:

[self performSelectorOnMainThread:@selector(choosePhoto) withObject:nil waitUntilDone:NO]; 

-(void)choosePhoto 
{ 

    UIActionSheet* actionSheet = [[UIActionSheet alloc] initWithTitle:@"" 
                delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil 
             otherButtonTitles:@"Take Photo", @"Choose from gallery", nil]; 
    actionSheet.actionSheetStyle = UIActionSheetStyleBlackOpaque; 
    actionSheet.tag = 1; 
    [actionSheet showInView:self.view]; 
    [actionSheet release]; 
} 

为我工作

+0

谢谢..我已经能够通过使用父指针来解决。将这个标记为将来的检查。 – 2010-09-28 18:43:08

+0

好吧..这似乎没有工作的最新版本的xCode ...应用陷阱与我的[actionSheet showInView:self.parentViewController.view];我的上述解决方案;这两个解决方法列出...回到绘图板... – 2011-07-10 21:03:15

我也有这个问题,但我是用​​(修复另一个bug,其中仅取消按钮一半是可选)。

现在我有条件地将其更改为iPad上的[actionSheet showInView:self.view];

我发现最好不要在UIActionSheetStyleBlackTranslucent上的iPad风格 - iPad有它自己的风格,并设置这似乎添加取消按钮(默认情况下,在iPad上没有显示)。

+0

行..会给这个尝试,我发现最新的构建我的.parentViewController技巧不工作...应用程序只是每次崩溃.. – 2011-07-10 20:55:05

+0

注意:使用该窗口会导致iPhone横向显示错误的操作单 – amleszk 2013-02-23 06:24:58

我相信问题是视图还没有出现。把它放在viewDidAppear中:它应该可以正常工作。

对于那些像我一样可以使用UIActionSheet略有不同比原来的问题,但在iPad上仍然失败,我一直在使用:

[actionSheet showFromRect:m_view.bounds inView:m_view animated:YES]; 
[actionSheet release]; 

...这适用于iPhone,但无法在iPad上。

此示例适用于我的特殊应用在两台设备上:

[actionSheet showInView:m_view]; 
[actionSheet release]; 

的问候,大卫

这是一个老问题,但我今天遇到同样的问题。 我有一个适用于iPhone和iPad的UIViewController的xib文件,UIActionSheet上的showInView方法导致iPad应用程序崩溃。

原来打电话给showInViewviewDidAppear,而不是viewDidLoad给我修好了。也许所有的IB连接都不是在viewDidLoad在iPad上被调用的时候完成的。

(我的UIViewController正在推到一个UINavigationController,所以我不知道,如果增加的动画时间是什么导致了整个issue_的快速反应