繁体   English   中英

使用UIRefreshControl

[英]Using UIRefreshControl

当前,我有一个使用UIRefreshControl的应用程序。

我遇到了一些问题...

这是我的代码:

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.searchDisplayController.delegate = self;
    UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];
    [refreshControl addTarget:self action:@selector(refresh:) forControlEvents:UIControlEventValueChanged];
    [self.rearTableView addSubview:refreshControl];
}


- (void)refresh:(UIRefreshControl *)refreshControl {
    [refreshControl beginRefreshing];
    [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(endRefresh:) userInfo:nil repeats:NO];
}

- (void)endRefresh:(UIRefreshControl *)refresh
{
    [refresh endRefreshing];
}

拉表视图确实初始化了timer但是2秒钟了...我的应用程序crashes并发送以下消息:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFTimer endRefreshing]: unrecognized selector sent to instance 0x9c093c0'

我很困惑 :(

问题:

发生此问题的原因:

[NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(endRefresh:) userInfo:nil repeats:NO];

您添加了endRefresh:作为计时器的选择器。 因此, endRefresh:方法的参数将是NSTimer而不是UIRefreshControl

实际的方法签名如下所示:

- (void)endRefresh:(NSTimer *)refresh
{
   //your code
}

您正在调用endRefreshing NSTimer对象,这就是发生崩溃的原因。

像这样声明:

- (void)endRefresh:(UIRefreshControl *)refresh

只需将NSTimer对象转换为UIRefreshControl

它等效于:

- (void)endRefresh:(NSTimer *)timer
{
   UIRefreshControl *refresh = (UIRefreshControl *)timer;
   [refresh endRefreshing];
}

解决方案1:

UIRefreshControl声明为属性并使用它。

解决方案2:

更改您的方法,例如:

- (void)refresh:(UIRefreshControl *)refreshControl
{
    [refreshControl beginRefreshing];
    [self performSelector:@selector(endRefresh:) withObject:refreshControl afterDelay:2.0f];
}

- (void)endRefresh:(UIRefreshControl *)refresh
{
    [refresh performSelectorOnMainThread:@selector(endRefreshing) withObject:nil waitUntilDone:NO];
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM