【发布时间】:2026-02-13 12:40:02
【问题描述】:
好的,我有一个可怕的 EXC_BAD_ACCESS,我似乎无法找到它,但它只发生在我第二次加载 UIWebView 时。我已经搜索并查看了关于 SO 的所有类似问题,并尝试了几种不同的方法,但我仍在苦苦挣扎。
这是最终加载 WebView 的程序流程。
我有一个列出视频的表格视图。 单击一行时,将加载详细信息视图,其中包含更多信息。关于视频。 加载详细视图后,如果用户单击“播放”,则会加载具有 WebView 的另一个视图。
在这个视图中,在 viewDidLoad 上,NSURLRequest 被创建并传递给 WebView loadRequest。
WebView 可以正常加载并显示包含我需要的视频的网页。所有这些都在导航控制器上,因此用户可以单击“返回”并返回到上一个详细视图。
我正在释放 dealloc 中的 WebView,如果它仍在这样做,也会停止加载它。 WebView 是通过 IBOutlet 获得的,并被合成为 (nonatomic,retain)。
我有 NSZombiesEnabled 并没有发现任何问题。那么它什么时候崩溃呢?如果用户再次单击“播放”,则会再次创建视频视图并在 [webView loadRequest] 上 - 一旦页面加载,我会得到一个 EXC_BAD_ACCESS。
不过,这里是关键,如果我回到表格并选择另一行(视频),那么我可以毫无问题地加载该 WebView。只有当我加载相同的视频两次时它才会崩溃。
保存 WebView 的视图在创建并推送到导航后被释放。控制器。我设置了大量的断点 - 在调用 webViewDidFinishLoad 之前,一切(在第二次加载时)都很好,之后发生的任何事情都会导致崩溃。我没有得到堆栈跟踪(或者不知道如何找到它):)
谢谢!
这是来自 WebView 视图的代码 - 其中一些是基于其他人对 UIWebView 内存问题的发现。
- (void)viewDidLoad {
[super viewDidLoad];
self.title = @"Video Player";
NSURL *url = [NSURL URLWithString:video.url];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[webView loadRequest:request];
}
- (void)viewDidUnload {
[super viewDidUnload];
[webView setDelegate:nil];
[self setWebView:nil];
}
- (void)dealloc {
[video release];
[super dealloc];
}
【问题讨论】:
-
提供一些代码,这可能是由于内存问题,如果我们没有看到代码,我们无能为力。
-
添加了视图中的代码 - 请注意,如果我不调用 loadRequest - 我可以根据需要多次加载此视图而不会出现任何问题。我的 webView 一定有什么问题。
标签: iphone uiwebview exc-bad-access