- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
此问题仅发生在 iOS4.3 上。我使用的是 ARC,我的 Base SDK 是 iOS6。
在-viewDidAppear
在我的 View Controller 中,我检查这是否是应用程序第一次启动,如果是,则创建并显示 UIAlertView。我将该 UIAlertView 分配给 strong
View Controller 上的属性并将 self 设置为 UIAlertView 委托(delegate)。
self.uiAlertView = [[UIAlertView alloc] initWithTitle:@"Welcome!"
message:messageString
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles:@"View Tutorial Videos", @"Email Support", nil];
当我点击其中一个按钮时,应用程序崩溃并提示 -alertView:didDismissWithButtonIndex:
被发送到已解除分配的实例。委托(delegate)是显示 UIAlertView 的 View Controller 。
在应用程序的所有后续启动中,当 UIAlertView 未显示时,没有问题。 View Controller 绝对没有被释放。
如果我显示 UIAlertView 但将委托(delegate)设置为 nil,那么就没有问题,应用程序会继续工作,所以显然 View Controller 尚未被释放,因为我可以继续使用它。
发生了什么事?这只会导致iOS4.3出现问题。
编辑:根据评论中的建议,我在不同的地方添加了更多日志消息。
我发现 View Controller 正在被释放,但前提是该 View Controller 显示 UIAlertView。究竟是什么会导致 View Controller 仅仅因为将自己设置为 UIAlertView 的委托(delegate)然后显示它而被释放?
我的应用程序委托(delegate)有一个 strong
对 View Controller 的引用,因此我绝对没有理由看到 View Controller 被释放。
编辑2:我发现在启动期间我的主视图 Controller 被实例化两次。第一个是创建 UIAlertView 的那个,并且那个正在被释放。第二个是我后来能够与之交互的那个,这让我认为 View Controller 仍然存在并且可以操作。
但是,我无法弄清楚我的 View Controller 将在何处或为何被创建两次。我没有任何 View Controller 的分配/初始化语句。它仅存在于MainWindow_iPhone.xib 中。
第一次在我的 View Controller 上调用 viewDidLoad 时,上面的堆栈帧是 [UIViewController view]。第二次在 View Controller 的第二个实例上调用 viewDidLoad 时,上面的堆栈帧是 [UINib instantiateWithOwner:options:]
编辑3:我已经“解决”了这个问题,但我不明白为什么会发生这种情况。也许你可以帮助我理解。
在我的 MainWindow_iPhone.xib 中,我创建了 Root View Controller 并将其分配给我的应用程序委托(delegate)上的 IBOutlet。相反,我从 xib 中删除了 View Controller ,并在 -application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
中的代码中创建了它。 ...然后问题就消失了。
为什么 View Controller 在 xib 中会被创建两次?
最佳答案
我以前也遇到过这个问题。在alertView: clickedButtonAtIndex: 之后调用alertView:didDismissWithButtonIndex:。您很可能通过执行类似 [self.navigationController popViewControllerAnimated:YES] 的操作来释放alertView:clickedButtonAtIndex 中的 View Controller 。
UIAlertView委托(delegate)分配非弱引用。当 delegate 被释放时,它不会自动设置为 nil。这就是您的代码崩溃的原因。
关于ios - 警报 View :didDismissWithButtonIndex: message sent to deallocated instance,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13146101/
第一次发帖,如有不妥请见谅。 我见过几个与此类似的问题,但没有一个问题相同。我正在运行 IOS 6.1 和 Xcode 4.6。问题是永远不会调用 didDismiss,只会调用 willDismis
当它在 UIalertView 委托(delegate)方法 alertView:didDismissWithButtonIndex: 中完成时,我在方法 popViewControllerAnima
我有一个 UIAlertView,它的 didDismissWithButtonIndex 委托(delegate)方法调用会弹出 View Controller (同一类,它是 AlertView
问题描述如下: 我有一个 View ,比如说 View A。要输入某些数据,我有一个警报,里面有一个文本字段,它会弹出。一旦用户在文本字段中输入数据,我就有一个 alertView:didDismis
我有一个加载空 View 的 loadView 方法 - (void) loadView { UIViewController *controller = [[UIViewController
(iOS7、xCode 5.1)我有一个可以出于各种目的访问日历的应用程序,并且我正在尝试将所有错误消息发送到位。 我有 2 UIAlertviews .两者 UIAlertviews在我需要的时候显
此问题仅发生在 iOS4.3 上。我使用的是 ARC,我的 Base SDK 是 iOS6。 在-viewDidAppear在我的 View Controller 中,我检查这是否是应用程序第一次启动
这些已被弃用,但我找不到改进它的解决方案: [alert addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@"Take Phot
我是一名优秀的程序员,十分优秀!