2015-09-07 1 views
0

Я реализовал Pull to Refresh в моем приложении, но он падает, когда я пытаюсь прокручивать, пока он еще освежает. вот код, который я использую: FYI, я вызываю webServices во время обновления.Pull To Refresh crashes app, если я пытаюсь прокручивать во время обновления

В ViewDidLoad:

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

Метод обновления:

-(void)callWebService:(UIRefreshControl *)refresh 
{ 
    static BOOL refreshInProgress = NO; 
    MessageWebServices *messageWebService = [[MessageWebServices alloc]init]; 

    MessageBO *tempBO = [[MessageBO alloc]init]; 

    if(self.flag) 
    { 
     self.navigationItem.title = @"My Posts"; 
     tempBO.projectId = [AppConstants getProjectId]; 
     tempBO.customerId =[AppConstants getCustomerId]; 

    } 
    else 
    { 
     tempBO.projectId = [AppConstants getProjectId]; 
    } 


    self.messageStore = [[NSMutableArray alloc] init]; 

    if (!refreshInProgress) 
    { 
     refreshInProgress = YES; 

     refresh.attributedTitle = [[NSAttributedString alloc] initWithString:@"Refreshing"]; 
     dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 

      self.messageStore = [messageWebService getMessageList:tempBO]; 

      dispatch_async(dispatch_get_main_queue(), ^{ 
       [refresh beginRefreshing]; 
       [self.tableView reloadData]; 
       [refresh endRefreshing]; 
       refreshInProgress = NO; 
      }); 
     }); 
    } 

} 

Пожалуйста, помогите!

+0

Ваша кодировка прекрасная проверка после того, как введено значение self.messageStore или нет –

+0

Спасибо, человек. Я понял, что снова инициализирую массив. Я удалил эту строку, и теперь она работает – sam24

ответ

0

Я никогда не использовал beginRefreshing способ. Вы можете легко добавить элемент управления обновлением в tableView.

#pragma mark Refresh Method 

-(void)startRefreshing { 
    if (!self.refreshControl) { 
     // Initialize the refresh control. 
     self.refreshControl = [[UIRefreshControl alloc] init]; 
     self.refreshControl.backgroundColor = CRREFRESHBGCOLOR; 
     self.refreshControl.tintColor = [UIColor whiteColor]; 
     [self.refreshControl addTarget:self action:@selector(callWebservice) forControlEvents:UIControlEventValueChanged]; 
     [yourTable addSubview:self.refreshControl];//add refresh control to your table 
    } 
} 

-(void)endRefreshing { 
    if (self.refreshControl) { 
     NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
     [formatter setDateFormat:@"MMM d, h:mm a"]; 
     NSString *title = [NSString stringWithFormat:@"Last update: %@", [formatter stringFromDate:[NSDate date]]]; 
     NSDictionary *attrsDictionary = [NSDictionary dictionaryWithObject:[UIColor whiteColor] 
                    forKey:NSForegroundColorAttributeName]; 
     NSAttributedString *attributedTitle = [[NSAttributedString alloc] initWithString:title attributes:attrsDictionary]; 
     self.refreshControl.attributedTitle = attributedTitle; 

     [self.refreshControl endRefreshing]; 
    } 
} 

После вызова/завершения метода веб-службы обработки вызовов [self endRefreshing]; метод и перезагрузить таблицу [yourTable reloadData].

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

  • Нет связанных вопросов^_^