iOS:重新加载表格视图不工作
我在UITableView中显示Twitter提要。 它正确加载。 我添加了一个Barbutton项目(刷新)来刷新表格。 但是,单击它不会重新加载表。 onClick函数被调用,但其中的代码不被执行。
//"TwitterViewController.h" #import "ViewController.h" @interface TwitterViewController : UITableViewController - (IBAction)refresh:(id)sender; @end
这里是我的“TwitterViewController.m”的一部分
- (void)viewDidLoad { [super viewDidLoad]; [self loadTweets]; } - (void)loadTweets { STTwitterAPI *twitter = [STTwitterAPI twitterAPIAppOnlyWithConsumerKey:@"consumer key" consumerSecret:@"consumer secret"]; [twitter verifyCredentialsWithSuccessBlock:^(NSString *bearerToken) { [twitter getUserTimelineWithScreenName:@"username" successBlock:^(NSArray *statuses) { self.twitterFeed = [NSMutableArray arrayWithArray:statuses]; [self.tableView reloadData]; } errorBlock:^(NSError *error) { NSLog(@"%@", error.debugDescription); }]; } errorBlock:^(NSError *error) { NSLog(@"%@", @"Error"); }]; } - (IBAction)refresh:(id)sender { [self.tableView reloadData]; }
您需要在重新加载tableview之前重新影响twitterFeed数组中的值,否则数据将会相同。
只需致电:
[self loadTweets];
代替
[self.tableView reloadData];
所以:
- (IBAction)refresh:(id)sender { [self loadTweets]; }
试试这将比重新加载数据更优雅。
- (IBAction)refresh:(id)sender { [self loadTweets]; }
在loadTweets中:
successBlock:^(NSArray *statuses) { [self.tableView beginUpdates]; self.twitterFeed = [NSMutableArray arrayWithArray:statuses]; [self.tableView endUpdates]; }
尝试这个:
//"TwitterViewController.h" #import "ViewController.h" @interface TwitterViewController : UITableViewController @property (strong, nonatomic) STTwitterAPI *twitter; - (IBAction)refresh:(id)sender; @end
TwitterViewController.m
- (void)loadTweets { if (!self.twitter) { self.twitter = [STTwitterAPI twitterAPIAppOnlyWithConsumerKey:@"consumer key" consumerSecret:@"consumer secret"]; } __weak typeof(self) weakSelf = self; [self.twitter verifyCredentialsWithSuccessBlock:^(NSString *bearerToken) { [weakSelf.twitter getUserTimelineWithScreenName:@"username" successBlock:^(NSArray *statuses) { weakSelf.twitterFeed = [NSMutableArray arrayWithArray:statuses]; [weakSelf.tableView reloadData]; } errorBlock:^(NSError *error) { NSLog(@"%@", error.debugDescription); }]; } errorBlock:^(NSError *error) { NSLog(@"%@", @"Error"); }]; }