2014-09-15 2 views
0

Я поставил код ниже, и он выглядит близко, но я не могу понять, почему он не выполняет фактическое обновление. Он имеет «Pull to refresh» и обновленный текст отображается правильно, но он не обновляет фактические данные. Я упускаю что-то очевидное, или у меня это неуместно или что-то в этом роде?Потяните, чтобы обновить функциональность не работает

Я отредактировал, чтобы добавить собственный вызов таблицы для перезагрузки данных. Еще не повезло.

ОКОНЧАТЕЛЬНЫЙ EDIT___User ниже решил это, вызвав фид данных.

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 

UIRefreshControl *refresh = [[UIRefreshControl alloc] init]; 
refresh.attributedTitle = [[NSAttributedString alloc] initWithString:@"Pull to refresh"]; 
[refresh addTarget:self action:@selector(refreshmytable:) forControlEvents:UIControlEventValueChanged]; 
self.refreshControl = refresh; 

NSURLSessionConfiguration *config = 
[NSURLSessionConfiguration defaultSessionConfiguration]; 

_session = [NSURLSession sessionWithConfiguration:config 
             delegate:self 
      // delegate:nil 
            delegateQueue:nil]; 

[self fetchFeed]; 



} 

- (void)refreshmytable:(UIRefreshControl *)refreshControl{ 

[self fetchFeed]; //Added 12:12 9.16.14 
refreshControl.attributedTitle = [[NSAttributedString alloc] initWithString:@"Updating"]; 
NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"MMM d, h:mm a"]; 
NSString *updated = [NSString stringWithFormat:@" Last Update: %@", [formatter  stringFromDate:[NSDate date]]]; 
refreshControl.attributedTitle = [[NSAttributedString alloc] initWithString:updated]; 
            [refreshControl endRefreshing]; 

[self.tableView reloadData]; //Added this 11:32 9.16.14 

} 





- (void)fetchFeed 
{ 
NSString *userEID = MAP_getUsername(); 
//NSLog(userEID); 

NSString *requestString1 = [@"URL" stringByAppendingString:userEID]; 

NSString *requestString2 = @"&status=pending"; 

NSString *requestString = [requestString1 stringByAppendingString:requestString2]; 

//NSLog(requestString); 

/*NSString *requestString = @"http://URL"; 
*/ 
NSURL *url = [NSURL URLWithString:requestString]; 
NSURLRequest *req = [NSURLRequest requestWithURL:url]; 

NSURLSessionDataTask *dataTask = 
[self.session dataTaskWithRequest:req 
       completionHandler: 
^(NSData *data, NSURLResponse *response, NSError *error) { 


    NSDictionary *jsonObject = [NSJSONSerialization JSONObjectWithData:data 
                   options:0 
                   error:nil]; 
    self.changeList = jsonObject[@"List"]; 
    //self.changeList=nil; //tried to add here to remove duplicate data 

    NSLog(@"%@", self.changeList); 

    //- add code here to populate BNRItemStore with the change order list. 
    // - following code should be rewritten in fetchFeed that will load BNRItemStore. 
    if (self.changeList.count>0) { 
     for (int i = 0; i < self.changeList.count; i++) { 
      NSDictionary *coItem = self.changeList[i]; 

      [[BNRItemStore sharedStore] 
       addItemWithApproverEid:coItem[@"approverEid"] 
       assignmentGroup:coItem[@"assignmentGroup"] 
       changeOrder:coItem[@"changeOrder"] 
       subcategory:coItem[@"subCatagory"] 
       title:coItem[@"title"] 


       ]; 
     } 
    } 
    //NSLog(@"sizeof(NSInteger) = %@", @(sizeof(NSInteger))); 
    //- end comment 

    dispatch_async(dispatch_get_main_queue(), ^{ 
     [self.tableView reloadData]; 
    }); 
    //self.changeList=nil; //trying to null out list for refresh non duplicate data 


    // NSString *json = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 
    // NSLog(@"%@", json); 
}]; 


[dataTask resume]; 
} 
+2

Какой код в вашем методе refreshmytable: 'собирает новые данные и сообщает об обновлении таблицы? – Wain

+0

Я добавил редактирование выше. Тем не менее, не удача. Похоже, он работает, но опять же данные остаются неизменными. –

+0

@JamesCockerham, убедитесь, что вы устанавливаете структуру данных, в которой ваши фиды сохраняются до нуля, прежде чем заполнять их новыми данными. Кроме того, отметьте ответ правильно, если он помог и ответил на ваш вопрос. Люди не помогают, если вы спрашиваете и не подтверждаете ответы. – bdparrish

ответ

1

Вы не выборку новых данных. У вас есть вызов метода/сообщения fetchFeed, который вы вызываете в viewDidLoad, но вы никогда не вызываете его в методе/сообщении обновления. Я предполагаю, что если вы обновляете, вам нужно получить новые данные. Вызов `[self fetchFeed]; ' перед перезагрузкой таблицы. Если вы извлекаете данные асинхронно, вам необходимо перезагрузить таблицу в блоке завершения, когда выборка новых данных будет завершена.

+0

Только что понял, что теперь я получаю повторяющиеся данные. Можете ли вы сказать мне, правильно ли я разместил его выше? –

+0

@JamesCockerham, см. Комментарий в оригинальной публикации. – bdparrish

0

Вам нужно позвонить в reloadData где-то в refreshmytable метод для представления таблицы для обновления данных

- (void)refreshmytable:(UIRefreshControl *)refreshControl{ 
    refreshControl.attributedTitle = [[NSAttributedString alloc] initWithString:@"Updating"]; 
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
    [formatter setDateFormat:@"MMM d, h:mm a"]; 
    NSString *updated = [NSString stringWithFormat:@" Last Update: %@", [formatter  stringFromDate:[NSDate date]]]; 
    refreshControl.attributedTitle = [[NSAttributedString alloc] initWithString:updated]; 
           [refreshControl endRefreshing]; 
    [self.tableView reloadData] 

}

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