首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用UIRefreshControl

使用UIRefreshControl
EN

Stack Overflow用户
提问于 2013-07-30 04:17:42
回答 1查看 2.5K关注 0票数 0

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

不过我有一些问题..。

这是我的代码:

代码语言:javascript
复制
- (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并发送以下信息:

代码语言:javascript
复制
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFTimer endRefreshing]: unrecognized selector sent to instance 0x9c093c0'

我很困惑:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-30 04:24:06

问题:

出现这一问题是因为:

代码语言:javascript
复制
[NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(endRefresh:) userInfo:nil repeats:NO];

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

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

代码语言:javascript
复制
- (void)endRefresh:(NSTimer *)refresh
{
   //your code
}

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

声明如下:

代码语言:javascript
复制
- (void)endRefresh:(UIRefreshControl *)refresh

只需将NSTimer对象类型转换为UIRefreshControl,仅此而已。

它相当于:

代码语言:javascript
复制
- (void)endRefresh:(NSTimer *)timer
{
   UIRefreshControl *refresh = (UIRefreshControl *)timer;
   [refresh endRefreshing];
}

解决方案1:

UIRefreshControl声明为属性并使用它。

解决方案2:

改变您的方法如下:

代码语言:javascript
复制
- (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];
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17938225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档