2014-02-05 4 views
0

Я показываю канал Twitter в UITableView. Он правильно загружается. Я добавил элемент кнопки «Бар» (обновить), чтобы обновить таблицу. Однако щелчок по нему не перезагружает таблицу. Вызывается функция 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 на UITableView не вызывает viewDidLoad снова. Вам нужно изучить протоколы UITableViewDelegate и UITableViewDataSource, чтобы лучше понять метод reloadData. – Luke

ответ

3

Вы должны повторно повлиять на значение в TwitterFeed массиве, прежде чем перезагрузить TableView, иначе данные будут одинаковыми.

Просто позвоните:

[self loadTweets]; 

вместо

[self.tableView reloadData]; 

так:

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

Привет, Албан, я тоже это пробовал. Однако функция вызывается, но изменений нет. –

1

Попробуйте это будет более элегантно, чем перезагружать данные.

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

В loadTweets:

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

            self.twitterFeed = [NSMutableArray arrayWithArray:statuses]; 

            [self.tableView endUpdates]; 
} 
+0

Привет, Микаэль, он все еще не работает. Таблица не обновляется. –

+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

- (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

Смежные вопросы