2011-03-04 65 views
0

我有一个UIViewController的子类也实现了UITableViewDelegate。
基本上,有一个UITableView显示,并选择一个单元格推新视图。
以下是有关代码看起来:objective C无法释放UIViewController

// NavigationContentsViewController.h 
@interface NavigationContentsViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> { 

    IBOutlet UITableView * newsTable; 
    UIActivityIndicatorView * activityIndicator; 
} 

/////////////////////////////////////////////////////////////////////// 
// placed in NavigationContentsViewController.m 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

    NSInteger selectedCellItem = indexPath.row; 

    TableViewController *fvController = [[TableViewController alloc] initWithNibName:@"TableViewController" bundle:[NSBundle mainBundle]]; 
    fvController.selectedCellItem = selectedCellItem; 
    fvController.link = [links objectAtIndex:selectedCellItem]; 
    [self.navigationController pushViewController:fvController animated:YES]; 
    [fvController release]; // #1 if removed everything works fine but getting a leak 
    fvController = nil;  // #2 
} 
/////////////////////////////////////////////////////////////// 
// TableViewController.h 
@interface TableViewController : UIViewController <UIWebViewDelegate>{ 
    NSInteger selectedCellItem; 
    IBOutlet UIWebView *myWebView; 
    NSString *link; 
    UIActivityIndicatorView *activityIndicator; 
} 

所以,当用户选择了一个小区,一个新的UIWebView推。
还有一个活动指示器显示,直到webView完成加载。

我的问题是,如果用户选择在webView完成加载之前从webView回到前一个视图(带有表格的视图),则应用程序崩溃,出现此错误:“[TableViewController respondsToSelector:] :消息发送到释放实例0x4b57460“

如果webView已完成加载,并且用户选择返回一切正常。

我设法解决这个问题,通过删除代码中标记为#1和#2的两行,但然后我得到一个内存泄漏(因为我不释放TableViewController)。

仍试图了解发生了什么。有任何想法吗?提前致谢。

回答

4

我怀疑你是设置你的TableViewController为代表的UIWebView中,你错过了the documentation此消息:

Important: Before releasing an instance of UIWebView for which you have set a delegate, you must first set its delegate property to nil . This can be done, for example, in your dealloc method.

如果忘记取出在dealloc的委托,web视图最终可能会尝试即使委托不再存在,也要发送委托消息。繁荣。

+0

这正是我正在做的,这正是我所缺失的......非常感谢回复!接受的答案;) – CrisDeBlonde 2011-03-04 00:33:27