【问题标题】:Trying to debug a 'Assertion failure in -[UIActionSheet showInView:]' error尝试调试“-[UIActionSheet showInView:] 中的断言失败”错误
【发布时间】:2010-06-01 02:58:50
【问题描述】:

我正在完成“开始 iPad 应用程序开发”,并在第 3 章中被挂断,在那里我创建了一个使用操作表的项目。

就目前而言,我的应用程序可以正常加载到模拟器中,没有任何我知道的错误,但在运行时,它会崩溃,并在调试器窗口中显示以下错误:

2010-05-31 19:44:39.703 UsingViewsActionSheet[49538:207] *** 断言 -[UIActionSheet showInView:] 失败, /SourceCache/UIKit_Sim/UIKit-1145.66/UIAlert.m:7073

2010-05-31 19:44:39.705 UsingViewsActionSheet[49538:207] *** 由于未捕获的异常而终止应用程序 'NSInternalInconsistencyException',原因:'无效参数不是 令人满意:view != nil

'

根据我对断点的使用,我确信这是应用程序中断的地方。

//实现viewDidLoad 以在加载视图后进行额外设置,通常从 nib 进行。

- (void)viewDidLoad { UIActionSheet *action = [[UIActionSheet alloc] initWithTitle:@"This is my Action Sheet!" delegate:self cancelButtonTitle:@"OK" destructiveButtonTitle:@"Delete Message!" otherButtonTitles:@"Option 1", @"Option 2", @"Option 3", nil];

[action showInView:self.view];  // <-- This line seems to trigger the crash....
[action release];
[super viewDidLoad];

}

我是否遗漏了一些明显的东西,或者问题比这里显示的更多?我已经查看了 showInView 的摘要,但还不能预测其中的任何内容。

感谢您的任何帮助。

问候,

史蒂夫·奥沙利文

【问题讨论】:

    标签: objective-c ipad uiactionsheet


    【解决方案1】:

    在 viewDidLoad 方法中,视图并未完全设置。窗口属性未连接。

    NSLog(@"View: %@; Window: %@",[self.view description], [self.view.window description]);
    

    可能会显示窗口为空/无。

    根据您的设计,您可能很幸运,只需在主线程上排队即可:

    -(void) showMyActionSheet
    {
        UIActionSheet *action = [[UIActionSheet alloc] initWithTitle:@"This is my Action Sheet!" delegate:self cancelButtonTitle:@"OK" destructiveButtonTitle:@"Delete Message!" otherButtonTitles:@"Option 1", @"Option 2", @"Option 3", nil]; 
        [action showInView:self.view];
        [action release];
    }
    
    - (void)viewDidLoad 
    {
        [super viewDidLoad]; 
        [self performSelectorOnMainThread:@selector(showMyActionSheet) withObject:nil waitUntilDone:NO];
    }
    

    【讨论】:

    • 没有。只是根据我的经验。
    【解决方案2】:

    我也遇到了同样的问题。 我正在将现有的 iPhone 应用程序转换为通用的。 我有几个调用 UIAlertViews 的按钮可以正常工作,但我有一个调用操作表的按钮。 它产生了同样的错误。在我的视图控制器的 ipadview.xib 的 IB 中,当我应该将它链接到按钮时,我将“视图”错误链接到窗口。 它现在工作正常。 希望这可以帮助。 (ps我是一个完全的新手,如果这没有帮助,请原谅) 尼尔

    【讨论】:

      【解决方案3】:

      我刚刚完成了同一章,本书的作者在此地址 http://p2p.wrox.com/book-beginning-ipad-application-development/79379-ch-3-usingviews-alert-actionsheet.html 虽然如果我是你,我会投票给 Eiko 的回复作为答案,因为它完成了示例的行为,而作者有你创建一个您在应用程序启动后单击以查看工作表的按钮。

      【讨论】:

        【解决方案4】:

        对于本主题的任何后来者,这仍然是 5.0 (9A334) iPad 模拟器和物理设备 (iPad) 中的问题。

        Eiko 的答案仍然正确。

        【讨论】:

          【解决方案5】:

          我最近修复了ActionSheet 的断言失败,如下所示:

          UIWindow* window = [[[UIApplication sharedApplication] delegate] window];
              if ([window.subviews containsObject:self.view]) {
                  [action showInView:self.view];
              } else {
                  [action showInView:window];
              }
          

          对我来说很好用。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-11-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-12-08
            相关资源
            最近更新 更多