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版本连接view
sockets。
我也有这个问题,但我使用[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时间是什么导致整个问题_