2014-02-05 39 views
0

我在UITableView中显示twitter feed。它正确加载。我添加了一个Bar按钮项目(刷新)来刷新表格。但是,单击它不会重新加载表。 onClick函数被调用,但其中的代码未被执行。iOS:重新加载表格视图不起作用

//"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]; 
} 
+1

reloadData不会再次调用viewDidLoad中。您需要研究UITableViewDelegate和UITableViewDataSource协议以更好地理解reloadData方法。 – Luke

回答

3

的一部分,你需要重新影响通过twitterfeed阵列值之前重新加载tableview中, 否则数据将是相同的。

只需拨打:中

[self loadTweets]; 

代替

[self.tableView reloadData]; 

这样:

- (IBAction)refresh:(id)sender { 
    [self loadTweets]; 
} 
+0

嗨Alban,我也尝试过。但是函数被调用,但没有改变。 –

1

试试这个这将是更优雅比重新加载数据。

- (IBAction)refresh:(id)sender { 
    [self loadTweets]; 
} 

在loadTweets:

successBlock:^(NSArray *statuses) { 
           [self.tableView beginUpdates]; 

            self.twitterFeed = [NSMutableArray arrayWithArray:statuses]; 

            [self.tableView endUpdates]; 
} 
+0

嗨Mikael,它仍然无法正常工作。表格不刷新。 –

+2

对于'beginUpdates',文档说:“你不应该在组中调用'reloadData'”。 'loadTweets'调用'reloadData',所以这是不行的。 – WDUK

+1

是的,你是正确的抱歉,我没有通过'loadTweets'。我会赞扬我的回应。 – Mika

1

试试这个:

//"TwitterViewController.h" 
#import "ViewController.h" 

@interface TwitterViewController : UITableViewController 
@property (strong, nonatomic) STTwitterAPI *twitter; 
- (IBAction)refresh:(id)sender; 

@end 

TwitterViewController.m上一个UITableView

- (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"); 

    }]; 
} 
+2

你能解释你做了什么,以及这可能有什么帮助? – WDUK

+0

它没有工作。 –

+0

在完成请求之前删除对象'STTwitterAPI' – user3276236