目前,我有一个使用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'我很困惑:
发布于 2013-07-30 04:24:06
问题:
出现这一问题是因为:
[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];
}https://stackoverflow.com/questions/17938225
复制相似问题