将refreshControl添加到TableViewController的子视图时的EXC_BAD_ACCESS

问题描述:

BrowseViewController加载BrowseResultsTableViewController作为subView。在这种subview,是下面的代码块:将refreshControl添加到TableViewController的子视图时的EXC_BAD_ACCESS

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init]; 
    [refreshControl addTarget:self action:@selector(refreshResults:) forControlEvents:UIControlEventValueChanged]; 
    [self.tableView addSubview:refreshControl]; 

} 

- (void)refreshResults:(UIRefreshControl *)sender 
{ 
    NSLog(@"REFRESH"); 
    //[self performSelector:@selector(updateTable) withObject:nil afterDelay:1]; 
} 

引发错误​​

如果我清理项目和rebulid,我得到这个错误:

2013-03-25 23:59:06.256 rockit[40772:c07] -[UIViewControllerWrapperView refreshResults:]: unrecognized selector sent to instance 0x7516fe0 2013-03-25 23:59:06.257 rockit[40772:c07] - Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIViewControllerWrapperView refreshResults:]: unrecognized selector sent to instance 0x7516fe0'

为什么不能它找到了方法?

+0

范围可能是一个问题,增加实例的范围或者你使用自动引用计数器移至实例级别 – Spynet 2013-03-26 08:35:02

+0

?如果不是,那么init需要一个“保留”。 – Gossamer 2013-03-26 08:41:22

我认为您创建BrowseResultsTableViewController后可能会发布,并且方法结束。您可能需要在引用它的BrowseViewController内创建一个实例变量。

// BrowseViewController.h

@interface BrowseViewController : UIViewController 
// ... 
@property (nonatomic, strong) BrowseResultsTableViewController *browseResultsVC; 
// ... 
@end 

// BrowseViewController.m

@implementation BrowseViewController 
@synthesize browseResultsVC; 
// ... 
- (void)someMethod { 
    self.browseResultsVC = [[BrowseResultsTableViewController alloc] init]; 
    [self.view addSubview:browseResultsVC]; 
} 
// ... 
#end 
+0

OMGOMGOMGGOMGOMGOMG!谢谢!我知道这是这样的,我正在失眠。现在,我可以开始一个微笑的一天。谢谢! – awsmsce 2013-03-26 15:36:34