iphone - UIAlertView 在未记录的方法上崩溃

标签 iphone cocoa-touch crash uialertview

由于一个难以捉摸的错误,我们的应用程序崩溃的频率约为每 1,500 次启动中就有 1 次崩溃。包括堆栈跟踪的相关部分。它作为回调被触发,所以我没有关于它在我自己的代码中发生的位置的引用。

看起来发生的事情是有一个 UIViewAnimationState 对象正在调用 UIAlertView 私有(private)方法 (_popoutAnimationDidStop:finished:)。唯一的问题是,此时 UIAlertView 似乎已被释放。我不会用警报 View 做任何奇怪的事情。我把它们扔掉,然后等待用户输入。它们都在发布之前展示过。

有人遇到过这种情况吗?目前,我倾向于认为这是 Apple 的一个 bug。

Thread 0 Crashed:
0   libobjc.A.dylib                 0x3138cec0 objc_msgSend + 24
1   UIKit                           0x326258c4 -[UIAlertView(Private) _popoutAnimationDidStop:finished:]
2   UIKit                           0x324fad70 -[UIViewAnimationState sendDelegateAnimationDidStop:finished:]
3   UIKit                           0x324fac08 -[UIViewAnimationState animationDidStop:finished:]
4   QuartzCore                      0x311db05c run_animation_cal

回帖

最佳答案

在委托(delegate)被释放后,UIAlertView 可能会尝试调用其委托(delegate)上的方法。为了防止这种类型的错误,每当您将一个对象设置为另一个对象的委托(delegate)时,请在委托(delegate)对象的 dealloc 方法中将委托(delegate)属性设置为 nil。例如


@implementation YourViewController
@synthesize yourAlertView;

- (void)dealloc {
    yourAlertView.delegate = nil; // Ensures subsequent delegate method calls won't crash
    self.yourAlertView = nil; // Releases if @property (retain)
    [super dealloc];
}

- (IBAction)someAction {
    self.yourAlertView = [[[UIAlertView alloc] initWithTitle:@"Pushed"
                         message:@"You pushed a button"
                         delegate:self
                         cancelButtonTitle:@"OK"
                         otherButtonTitles:nil] autorelease];
    [self.yourAlertView show];
}

// ...

@end

关于iphone - UIAlertView 在未记录的方法上崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2581081/

相关文章:

ios - 如何在IOS中动态计算文本字段中的字符数

ios - 应用程序审核拒绝了我的应用程序 : EXC_CRASH (SIGABRT)

iphone - 发送到实例的选择器无效 - objectForKey :

php - 正在所有浏览器和 iPhone 上上传文件,iPad 除外

iphone - UIActivityIndi​​catorView 的背景颜色

android - Crashlytics 崩溃了

python - PyQT崩溃(底层C/C++对象已被删除) “after” clear QTreeWidget

iphone - 在 Facebook 中注销

iphone - 如何在 MPMovieplayercontroller 中将视频旋转 90º

objective-c - WSDL 文件和 SOAP header