Iphone UIAlert代理,他们是否与应用程序的其他部分发生冲突?

Iphone UIAlert代理,他们是否与应用程序的其他部分发生冲突?,iphone,objective-c,uialertview,Iphone,Objective C,Uialertview,我试图将UIAlert添加到我的应用程序中,但它开始导致崩溃 所以我注释掉了我的代码,只留下了这个方法 -(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { } 并添加了接口 <UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate, UIAlertViewDelegate > 但是

我试图将UIAlert添加到我的应用程序中,但它开始导致崩溃

所以我注释掉了我的代码,只留下了这个方法

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
{
}
并添加了接口

<UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate, UIAlertViewDelegate >

但是当应用程序中已经存在的警报弹出时,即使它在应用程序的另一个类中。我一按警报上的ok键,它就会崩溃

是否有一些我从未遇到过的与警报的奇怪冲突

任何能提出可能发生的事情的人。应用程序崩溃,没有任何输出到调试控制台。所以没有任何问题的迹象

谢谢
-代码

否,与警报没有奇怪的冲突。如果选中
标记
属性并在委托中检查该属性,您甚至可以从单个类获得多个警报

通常,崩溃表示您过早释放了代理。当您添加代理时,它不会保留它(以避免释放周期),因此您必须手动确保在按下按钮时它仍然存在


您可以通过在所有委托方法中放置断点来验证这一点。

否,与警报没有奇怪的冲突。如果选中
标记
属性并在委托中检查该属性,您甚至可以从单个类获得多个警报

通常,崩溃表示您过早释放了代理。当您添加代理时,它不会保留它(以避免释放周期),因此您必须手动确保在按下按钮时它仍然存在


您可以通过在所有委托方法中设置断点来验证这一点。

基于您对上述注释的回答。看起来您的委托对象提前发布了。我不确定您如何声明UIAlert,但通常我喜欢这样

  • 像以前一样使用UIAlertViewDelegate
  • 实现ClickedButtonIndex,就像您所做的一样
  • 调用UIAlert并用如下方法释放它
  • /*代码*/

    -(void) showSomething
    {
        UIAlertView *av = [[[UIAlertView alloc] initWithTitle:@"title here"
                            message:@"message here."
                            delegate:self
                            cancelButtonTitle:@"Cancel"
                            otherButtonTitles:@"Settings", nil] autorelease];
    
        [av show];
    }
    

    希望对您有所帮助。

    基于您对上述评论的回答。看起来您的委托对象提前发布了。我不确定您如何声明UIAlert,但通常我喜欢这样

  • 像以前一样使用UIAlertViewDelegate
  • 实现ClickedButtonIndex,就像您所做的一样
  • 调用UIAlert并用如下方法释放它
  • /*代码*/

    -(void) showSomething
    {
        UIAlertView *av = [[[UIAlertView alloc] initWithTitle:@"title here"
                            message:@"message here."
                            delegate:self
                            cancelButtonTitle:@"Cancel"
                            otherButtonTitles:@"Settings", nil] autorelease];
    
        [av show];
    }
    

    希望对您有所帮助。

    可能您应该先尝试查看控制台输出。您好Jirapong。正如我所说:应用程序崩溃,没有任何输出到调试控制台。如果控制台给了我一个提示,我就不会要求你们的直觉来判断可能发生了什么。没有提示的崩溃通常是一个过度释放的问题,或者将指针记录为INT。你的问题可能更多地与原始警报有关-你能在创建两个警报的地方发布代码吗?你说“警报”是什么意思这已经在应用程序pops中了,即使它在应用程序“”的另一个类中??可能你应该先尝试查看控制台输出。嗨,Jirapong。正如我所说:应用程序崩溃,没有任何输出到调试控制台。如果控制台给了我一个提示,我就不会要求你们的直觉来判断可能发生了什么。没有提示的崩溃通常是一个过度释放的问题,或者将指针记录为INT。你的问题可能更多地与原始警报有关-你能在创建两个警报的地方发布代码吗?你说“警报”是什么意思这已经在应用程序pops中了,即使它在应用程序“”的另一个类中??