1

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

在大多数情况下,此解决方法的作用就像魅力一样。但有时(随机出现)的应用与EXC_BAD_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]; 
} 

回答

4

你在后台线程调用-endRefreshing崩溃。不要这样做。

而且,直接添加UIRefreshControl作为UITableView的子视图不能保证能正常工作。你应该使用UITableViewController

+0

感谢戴夫!在主线程中调用它解决了我的问题。 – Motasim

1

首先你把一个标签在UIRefreshControl

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