Is it possible to start UIRefreshControl
automatically upon launch of an app? I tried calling self.refreshControl beginRefreshing];
but it's not working.
Here's some code in my viewDidLoad:
UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];
[refreshControl addTarget:self action:@selector(refreshNowShowingMoviesList:) forControlEvents:UIControlEventValueChanged];
[self setRefreshControl:refreshControl];
[refreshControl beginRefreshing];
Here's inside my refreshNowShowingMoviesList method:
- (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];
}
with the error message:
'NSInvalidArgumentException', reason: '-[MasterViewController endRefreshing]: unrecognized selector sent to instance 0xa172450'
You should call refreshNowShowingMoviesList:nil
(note the nil
parameter). Then it won't crash, because you can call anything on nil objects. But it seems like you are calling refreshNowShowingMoviesList:self
. This results in endRefreshing
call on MasterViewController
, which is not available.
Or even easier/better, check the class before calling:
if([sender respondsToSelector:@selector(endRefreshing)]) {
[(UIRefreshControl *)sender endRefreshing];
}
Or just use properties instead of the sender argument. Smth. like self.tableView.refreshControl
...