2014-02-05 41 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