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 自动启动的主要内容,如果未能解决你的问题,请参考以下文章

在uitableview中使用UIRefreshControl

下拉刷新上拉加载更多

自定义 UIRefreshControl 动画

SERVER服务不能自动启动

linux设置开机服务自动启动/关闭自动启动命令

Zookeeper 启动后自动关闭