将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'
为什么不能它找到了方法?
我认为您创建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
OMGOMGOMGGOMGOMGOMG!谢谢!我知道这是这样的,我正在失眠。现在,我可以开始一个微笑的一天。谢谢! – awsmsce 2013-03-26 15:36:34
范围可能是一个问题,增加实例的范围或者你使用自动引用计数器移至实例级别 – Spynet 2013-03-26 08:35:02
?如果不是,那么init需要一个“保留”。 – Gossamer 2013-03-26 08:41:22