Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/105.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 应用程序在释放视图控制器对象时崩溃_Ios_Viewcontroller - Fatal编程技术网

Ios 应用程序在释放视图控制器对象时崩溃

Ios 应用程序在释放视图控制器对象时崩溃,ios,viewcontroller,Ios,Viewcontroller,我的应用程序在释放view controller对象时崩溃。 这是我的密码 TagCloudWebViewController *controller=[[[TagCloudWebViewController alloc]init]autorelease]; controller.htmlString=[[notification userInfo] valueForKey:@"url"]; [self.navigationController pushViewController:contro

我的应用程序在释放view controller对象时崩溃。 这是我的密码

TagCloudWebViewController *controller=[[[TagCloudWebViewController alloc]init]autorelease];
controller.htmlString=[[notification userInfo] valueForKey:@"url"];
[self.navigationController pushViewController:controller animated:YES];
这是我调用上述方法时的代码

-(void)viewDidLoad{
 [super viewDidLoad]; 
[[NSNotificationCenter defaultCenter] addObserver:self  selector:@selector(openTextInWebview:) name:@"kTouchTextUrl" object:Nil];
}

WebView delgate方法

-(void) webViewDidStartLoad:(UIWebView *)webView {
self.navigationItem.title = @"Loading...";
[spinnerView startAnimating];  
isLoading = YES;
}

  • (无效)openURL:(NSURL*)URL{ NSMutableURLRequest*请求=[NSMutableUrlRequestRequestWithURL:URL]; [_webviewloadrequest:request]; }

我没有看到任何导致崩溃的事情。我认为您已经更改了问题。根据问题,您在任何地方都没有使用ViewController。请显示更多详细信息


更新:请检查,您正在创建自动删除对象,可能是您在错误的地方释放了一些对象。请尽量避免自动删除对象,因为它保留在池中以及以后的版本中,这可能会导致内存问题。

更新:以下答案是对原始问题的回答,即为什么带有
UIWebView
UIViewController
没有出现。OP最初的理论是,它与视图控制器对象的过早释放有关。但是,正如我在下面的回答中所概述的,我怀疑问题与视图控制器本身的创建有关。无论如何,我对原问题的回答如下(但不幸的是,这与修改后的问题无关):

我个人并不怀疑这个问题与 释放控制器。我认为这是在创造 控制器的视图。上面的代码中没有导致 对象,所以问题就在别处,您需要 显示更多代码。如果您担心您的通知中心 东西,尝试绕过它,只需添加一个按钮,你的
TagCloudWebViewController
alloc/init,设置
htmlString
并按下, 看看这是否仍然会导致你的程序崩溃,我怀疑是这样 威尔

我注意到您正在通过
alloc
init
创建控制器, 但不是
initWithNibNamed
。根据报告: “如果无法在故事板或nib文件中定义视图, 重写
loadView
方法以手动实例化视图 层次结构并将其指定给视图属性。“

所以,底线是,要么使用笔尖,要么使用故事板,要么定义
loadView
。定义
viewDidLoad
并不排除需要
loadView
。您需要为控制器创建一个视图,即 如果您使用NIB或故事板,或者您必须手动执行,则为您完成 如果您不使用NIB或故事板,请通过
loadView

看 有关
viewDidLoad
loadView


上述问题是由于WebView delgate引起的。按下“后退”按钮后,对象的引用将从内存中解除分配,因为此应用程序在释放viewcontroller对象时崩溃。我做了一些类似的事情

-(void) viewDidDisappear:(BOOL)animated{
if([_webView isLoading]) {
    [_webView stopLoading];
}
[_webView setDelegate:nil];
}


由于上述代码,我的崩溃已经解决了

你可能想考虑切换到ARC。无论如何:在你的代码中,控制器是自动释放的-如果你以后在代码中释放它,它肯定会崩溃。我不明白你的意思,请解释。当应用程序崩溃时,控制台中显示了什么?您能否在问题中添加这一点,然后最好回答***-[TagCloudWebViewController respondsToSelector:]:消息已发送到取消分配的实例0x8595b90,在上获取此错误消息console@Rob我也尝试过使用release,但我正在解决崩溃问题,直到加载web视图后web视图未加载,它崩溃并给出相同的mesage***-[TagCloudWebViewController respondsToSelector:]:消息已发送到解除分配的实例0x8595b90@Nishi如果我理解正确的话,视图现在显示得很好,但加载完成后会崩溃。如果是这样,您显然必须为
UIWebViewDelegate
方法共享代码。(顺便说一句,你已经彻底改变了你的问题,这是令人气馁的,因为它会使所有答案无效(这使后来蹒跚而行的其他人很难弄清楚发生了什么,因为在考虑新修订的问题时,答案毫无意义).将来,你可能想避免对你的问题进行根本性的改变。)解决了我的问题。这是由于WebView委托造成的。我在viewWillopser方法中使用了webvie.delgate=nil。崩溃问题解决。谢谢大家
-(void) webViewDidStartLoad:(UIWebView *)webView {
self.navigationItem.title = @"Loading...";
[spinnerView startAnimating];  
isLoading = YES;
-(void) webViewDidFinishLoad:(UIWebView*)webView {
self.navigationItem.title = [_webView stringByEvaluatingJavaScriptFromString:@"document.title"];
[self performSelector:@selector(stopSpinner) withObject:nil afterDelay:0.1]; 
isLoading = NO;
}

-(void) webView:(UIWebView*)webView didFailLoadWithError:(NSError*)error {
[self webViewDidFinishLoad:webView];
[self performSelector:@selector(stopSpinner) withObject:nil afterDelay:0.1]; 
isLoading = NO;
}
-(void) viewDidDisappear:(BOOL)animated{
if([_webView isLoading]) {
    [_webView stopLoading];
}
[_webView setDelegate:nil];