gpt4 book ai didi

objective-c - EXC_BAD_ACCESS 调用 DismissViewControllerAnimated 时出错 :completion: (iOS5)

转载 作者:行者123 更新时间:2023-12-03 17:58:39 28 4
gpt4 key购买 nike

我很难让它发挥作用。我有两个具有关联 View 的 View Controller ,称为 DomainSelectionViewController 和 DomainViewController。我正在浏览 Apple 开发者网络上的一个教程,其中介绍了 View Controller 的呈现。我在尝试运行时收到 EXC_BAD_ACCESS 信号。

以下是每个文件的相关摘录:

DomainSelectionViewController.h

@class DomainViewController;

@interface DomainSelectionViewController : UIViewController

- (IBAction)domainSelected:(id)sender;
- (IBAction)leaveDomain;

@property (retain) DomainViewController * selectedDomain;

@end

domainSelected:附加到代表域的按钮。单击它成功地将界面中的当前 View 替换为 DomainViewController 的 nib 中定义的 View 。

DomainSelectionViewController.m

@implementation
- (IBAction)domainSelected:(id)sender {
NSLog(@"Domain Selected...");
selectedDomain = [[DomainViewController alloc] initWithNibName:@"DomainView" bundle:nil];
selectedDomain.domainSelectionContext = self;
[self presentViewController:selectedDomain animated:NO completion:nil];
}

- (IBAction)leaveDomain {
NSLog(@"Leaving Domain...");
NSLog(@"Presented Domain: %@", self.presentedViewController);
//selectedDomain.modalPresentationStyle = UIModalPresentationFullScreen;
[self dismissViewControllerAnimated:NO completion:nil];
}

DomainViewController.h

#import <UIKit/UIKit.h>
#import "DomainSelectionViewController.h"

@class DomainSelectionViewController;

@interface DomainViewController : UIViewController

//@property (nonatomic, assign) DomainSelectionViewController * presentingViewController;
@property (nonatomic, retain) DomainSelectionViewController * domainSelectionContext;

@end

DomainViewController.m

- (IBAction)exit:(id)sender {
NSLog(@"Leaving Domain...");
if(self.presentingViewController) {
NSLog(@" Dismissing View Controller: %@.", self.presentingViewController);
[self.domainSelectionContext leaveDomain];
//[self.presentingViewController dismissViewControllerAnimated:NO completion:nil];
return;
}
else {
NSLog(@"Presenting view controller not set.");
}
}

domainview 仅包含一个读取“后退”的按钮,并连接到其自己的 exit: 函数,该函数又在其委托(delegate)上调用leaveDomain。单击此按钮就会产生 EXC_BAD_ACCESS 调用。查看其他类似的帖子,据说 EXC_BAD_ACCESS 错误通常是由于尝试调用已释放的对象而引起的,但在解雇调用之前的打印语句显示该对象仍然存在并且可以引用。我希望有比我更有经验的人能够看到这一点并轻松推测出了什么问题。

为了完整起见,以下是控制台的输出:

Attaching to process 26860.
2012-03-24 19:23:45.601 domaintest[26860:f803] DomainSelectionView Initialized.
2012-03-24 19:23:52.627 domaintest[26860:f803] Domain Selected...
2012-03-24 19:24:14.187 domaintest[26860:f803] Leaving Domain...
2012-03-24 19:24:14.188 domaintest[26860:f803] Dismissing View Controller: <DomainSelectionViewController: 0x688f9a0>.
2012-03-24 19:24:14.188 domaintest[26860:f803] Leaving Domain...
2012-03-24 19:24:14.188 domaintest[26860:f803] Presented Domain: <DomainViewController: 0x6891d90>
Current language: auto; currently objective-c
warning: Attempting to create USE_BLOCK_IN_FRAME variable with block that isn't in the frame.
(gdb)

最佳答案

因此,经过相当多的反复试验后,这里的问题出现在 View 层次结构的较高位置。该设计有一个完全空的 Root View Controller ,它用第一个 (DomainSelectionViewController) Controller 的 View 替换了自己的 View

self.window.rootViewController.view = domainSelectionViewController.view;

最终结果是domainSelectionViewController可以呈现domainViewController的 View ,但尝试关闭它会导致EXC_BAD_ACCESS。我仍然不完全确定原因,但更改它,使 domainSelectionViewController 成为主视图,或者在 ViewDidAppear 中使用 rootViewController present domainSelectionViewController 解决了问题。

关于objective-c - EXC_BAD_ACCESS 调用 DismissViewControllerAnimated 时出错 :completion: (iOS5),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9856684/

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