gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 18:38:31 24 4
gpt4 key购买 nike

由于一个难以捉摸的错误,我们的应用程序崩溃的频率约为每 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com