سؤال

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];

Edit

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...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top