Uitableview UIRefreshControl EXC\u坏访问

Uitableview UIRefreshControl EXC\u坏访问,uitableview,uiviewcontroller,exc-bad-access,uirefreshcontrol,Uitableview,Uiviewcontroller,Exc Bad Access,Uirefreshcontrol,我试图在UIViewController中实现UIRefreshControl。我无法使用UITableViewController,因为tableView只是我的viewController的一部分 在大多数情况下,这种变通方法的效果很好。但有时(随机发生)应用程序崩溃时EXC\u BAD\u ACCESS code=1 - (void)viewDidLoad { [super viewDidLoad]; UIRefreshControl * refCon = [[UIRef

我试图在UIViewController中实现UIRefreshControl。我无法使用UITableViewController,因为tableView只是我的viewController的一部分

在大多数情况下,这种变通方法的效果很好。但有时(随机发生)应用程序崩溃时
EXC\u BAD\u ACCESS code=1

- (void)viewDidLoad {
    [super viewDidLoad];

    UIRefreshControl * refCon = [[UIRefreshControl alloc] init];
    [refCon addTarget:self selector:@selector(refresh:) forControlEvent:UIControlEventValueChanged];
    [tableView addSubView:refCon];
}

- (void)refresh:(UIRefreshControl *)sender {
    [NSThred detachNewThreadSelector:@selector(doRefresh:) toTarget:self withObject:sender];
}

- (void)doRefresh:(UIRefreshControl *)sender {
    [self checkUpdate];
    [self loadData];
    [sender endRefreshing];
}

您正在后台线程上调用
-endRefreshing
。不要那样做


而且,直接将
UIRefreshControl
添加为
UITableView
的子视图也不能保证有效。在UIRefreshControl上放置标记时,应首先使用
UITableViewController

UIRefreshControl * refCon = [[UIRefreshControl alloc] init];
[refCon addTarget:self selector:@selector(refresh:) forControlEvent:UIControlEventValueChanged];
refCon.tag = 101 //for example
[tableView addSubView:refCon];
当tableView完成重新加载后,您将:

UIRefreshControl *getRefreshControl = (UIRefreshControl*)[self.tablaPildoras viewWithTag:101];
[getRefreshControl endRefreshing];

谢谢你,戴夫!在主线程上调用它为我解决了问题。