[英]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];
}
将UIRefreshControl
声明为属性并使用它。
更改您的方法,例如:
- (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.