UIRefreshControl 自动启动
Posted
技术标签:
【中文标题】UIRefreshControl 自动启动【英文标题】:UIRefreshControl Auto Start 【发布时间】:2013-05-22 08:41:50 【问题描述】:是否可以在启动应用程序时自动启动UIRefreshControl
?我试过打电话给self.refreshControl beginRefreshing];
,但它不起作用。
这是我 viewDidLoad 中的一些代码:
UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];
[refreshControl addTarget:self action:@selector(refreshNowShowingMoviesList:) forControlEvents:UIControlEventValueChanged];
[self setRefreshControl:refreshControl];
[refreshControl beginRefreshing];
编辑
这是我的 refreshNowShowingMoviesList 方法:
- (void)refreshNowShowingMoviesList:(id)sender
// Create URL
NSURL *url = [NSURL URLWithString:kNowShowingMoviesURL"];
// Initialize URL request
NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:url];
// Set value on header
[urlRequest setValue:kHeaderFieldValue forHTTPHeaderField:kHeaderField];
// JSON request operation
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:urlRequest success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON)
NSMutableArray *results = [(NSDictionary *)JSON objectForKey:@"results"];
if ([results count])
_objects = results;
// Reload table view
[self.tableView reloadData];
// End refreshing
[(UIRefreshControl *)sender endRefreshing];
failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON)
// End refreshing
[(UIRefreshControl *)sender endRefreshing];
// Show error alert
dispatch_async(dispatch_get_main_queue(), ^
UIAlertView *errorAlert = [[UIAlertView alloc] initWithTitle:kSorryTitle message:[error localizedDescription] delegate:self cancelButtonTitle:nil otherButtonTitles:kOk, nil];
[errorAlert show];
);
];
// Start operation
[operation start];
带有错误信息:
'NSInvalidArgumentException', reason: '-[MasterViewController endRefreshing]: unrecognized selector sent to instance 0xa172450'
【问题讨论】:
如果你想调用 refreshNowShowingMoviesList:,就这样做。或者你想看 RefreshControl 动画? 调用该方法会出错,因为在获取结果后,它会停止UIRefreshControl
的刷新动画。
错误信息是什么?可以发一下方法代码吗?
按要求添加了附加代码。
消息很清楚,您的 MasterViewController 没有实现 endRefreshing 方法。
【参考方案1】:
您应该调用refreshNowShowingMoviesList:nil
(注意nil
参数)。然后它不会崩溃,因为你可以在 nil 对象上调用任何东西。但您似乎在致电refreshNowShowingMoviesList:self
。这导致endRefreshing
调用MasterViewController
,这是不可用的。
或者更简单/更好,在调用之前检查类:
if([sender respondsToSelector:@selector(endRefreshing)])
[(UIRefreshControl *)sender endRefreshing];
或者只使用属性而不是 sender 参数。嗯。喜欢self.tableView.refreshControl
...
【讨论】:
以上是关于UIRefreshControl 自动启动的主要内容,如果未能解决你的问题,请参考以下文章