UIActionSheet在iPad /不是iPhone上崩溃

当我在控制台看,我收到这个消息

 2010-09-18 17:04:05.284浪费时间[8998:207] ***声明失败 -  [UIActionSheet showInView:],/ SourceCache /UIKit_Sim/UIKit-1145.66/UIAlert.m:7073
 2010-09-18 17:04:05.286浪费时间[8998:207] ***由于未捕获exception'NSInternalInconsistencyException',原因:'无效的参数不令人满意:view!= nil'
 2010-09-18 17:04:05.286浪费时间[8998:207]堆栈:(
     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
 )
抛出'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模拟器崩溃。

错误消息说:

无效的参数不令人满意:view!= nil

可能来自这一行:

 [actionSheet showInView:self.view]; 

既然你说这个function在iPhone上,而不是在iPad上,这意味着iPad到达这条线所需的代码path可能不同于iPhone到达这条线所需的代码path。 这意味着视图控制器的view属性可能没有为iPad设置。

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

我也有这个问题,但我使用[actionSheet showInView:[self.view window]]; (修复只有一半取消button可选的另一个bug)。

现在我有条件地改变这个[actionSheet showInView:self.view]; 在iPad上。

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

这样做:

 [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]; } 

为我工作

我相信问题是这个观点还没有出现。 把它放在viewDidAppear:它应该工作正常。

对于像我这样使用UIActionSheet的人来说,与原来的问题略有不同,但在iPad上仍然失败,我一直在使用:

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

…在iPhone上工作,但在iPad上失败。

这个例子在我的两个设备上的特定应用程序工作:

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

问候,大卫

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

原来在viewDidAppear调用showInView ,而不是viewDidLoad为我修复。 也许所有的IB连接都不是在iPad上调用viewDidLoad的时候创build的。

(我的UIViewController被推到一个UINavigationController,所以我想知道如果增加的animation时间是什么导致整个问题_