UIRefreshControl自动启动

时间:2013-05-22 08:41:50

标签: iphone objective-c xcode uirefreshcontrol

启动应用后是否可以自动启动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'

1 个答案:

答案 0 :(得分:1)

您应该致电refreshNowShowingMoviesList:nil(请注意nil参数)。然后它不会崩溃,因为你可以在nil对象上调用任何东西。但似乎你在呼叫refreshNowShowingMoviesList:self。这会导致对endRefreshing进行MasterViewController调用,但这不可用。

甚至更容易/更好,请在致电之前检查课程:

if([sender respondsToSelector:@selector(endRefreshing)]) {
    [(UIRefreshControl *)sender endRefreshing];
}

或者只使用属性而不是sender参数。水木清华。比如self.tableView.refreshControl ...