【问题标题】:EXC_BAD_ACCESS when adding refreshControl to TableViewController's subview将 refreshControl 添加到 TableViewController 的子视图时的 EXC_BAD_ACCESS
【发布时间】:2013-03-26 07:03:42
【问题描述】:

BrowseViewControllerBrowseResultsTableViewController 加载为 subView。在那个subview,是下面的代码块:

- (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];
}

抛出错误Thread 1: EXC_BAD_ACCESS (code=2 ....

如果我清理项目并重新编译,我会收到此错误:

2013-03-25 23:59:06.256 rockit[40772:c07] -[UIViewControllerWrapperView refreshResults:]:无法识别的选择器发送到实例 0x7516fe0 2013-03-25 23:59:06.257 rockit[40772:c07] - 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[UIViewControllerWrapperView refreshResults:]:无法识别的选择器发送到实例 0x7516fe0”

为什么找不到方法?

【问题讨论】:

  • 范围可能有问题 增加实例范围或移动到实例级别
  • 您使用自动参考计数器吗?如果没有,那么 init 需要一个 retain

标签: objective-c ios6 uitableview


【解决方案1】:

我认为您对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

【讨论】:

  • OMGOMGOMGOMGOMGOMGOMG!谢谢你!我知道是这样的,我为此失眠了。现在我可以带着微笑开始新的一天了。谢谢!
猜你喜欢
  • 2020-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多