2015-02-04 3 views
1

Я создаю массив источника данных UITableView, используя этот код:UITableView reloadData не работает в прошивкой

-(void) viewWillAppear:(BOOL)animated 
{ 
    // IBOutlet of tableview is 'editMsgTableView' 
    editMsgTableView.dataSource=nil; 
    editMsgTableView.delegate=nil; 

    menuMessageArray = [[NSMutableArray alloc] init]; 
    editMainMenuMsgArray = [[NSMutableArray alloc] init]; 
    menuMessageArray = [DBManager fetchmenu:0 noOfRows:32]; 

    for(int i=0; i< [menuMessageArray count]; i++) 
    { 
     NSMutableDictionary *menuMsgListDic = [[NSMutableDictionary alloc] init]; 
     menuMsgListDic = [menuMessageArray objectAtIndex:i]; 
     [editMainMenuMsgArray addObject:menuMsgListDic]; 
    } 

    editMsgTableView.dataSource=self; 
    editMsgTableView.delegate=self; 
    [editMsgTableView reloadData]; 
} 

Но он работает в первый раз. Но всякий раз, когда я делаю редактирование какого-либо файла tableView или приходит из другого контроллера представления, после этого, если вызывается viewWillAppear, то reloadData не работает. Я также пробовал:

dispatch_sync(dispatch_get_main_queue(), ^{ 
    [editMsgTableView reloadData]; 
}); 

но не работает. Пожалуйста, помогите мне.

+1

Возможно, ваша перезагрузка вызвана, но примечание изменено. Вызывается ли метод делегата tableview? –

+1

- ваш массив источников данных получает обновленные данные? проверьте это тоже. – Akhilrajtr

+0

Прежде всего, вы действительно хотите заполнить содержимое своей таблицы каждый раз, когда появится ваше представление? Вы отлаживались, если вызываются numberOfSectionsInTableView? –

ответ

3

Когда редактирование начинается с вызова [tableView startUpading];, и когда редактирование сделано, позвоните [tableView stopUpdating];, затем [tableView reloadData];.

+0

это можно легко вставить в комментарий – tod

+0

@tod недостаточно репо :) – amar

0

Try,

dispatch_async(dispatch_get_main_queue(), ^{ 
    [editMsgTableView reloadData]; 
}); 
0

вы даете к этому ViewController в tableViewDelegates правильно? :

@interface theNameOfTheViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> в .h файле?

я предлагаю не делать этого:
editMsgTableView.dataSource=nil; editMsgTableView.delegate=nil; editMsgTableView.dataSource=self; editMsgTableView.delegate=self;

только это:

[self.editMsgTableView reloadData]; 

быть уверены, что все методы делегата вызывается при использовании reloadData (поставить точку останова в каждом методе делегата, который следует использовать для перезагрузки данных таблицы при внесении изменений или представления Появляется), помните, что метод reloadData, вызывает все методы делегата (если вы правильно даете контроллеру представления делегат, как я сказал ранее) tableViewController. Скажи мне, если ничего из этого не поможет.

0

Я предполагаю, что вы просматриваете представление с одного вида на другое, тогда вы должны позвонить [tableView reloadData] по телефону ViewDidLoad. Это происходит из-за вид жизненного цикла - когда вы возвращаетесь с одной точки зрения, и ваш tableView источника данных обновляется, вид жизненного цикла будет выглядеть следующим образом:

  1. viewDidLoad
  2. tableViewDelegateMethods
  3. viewDidAppear

Так что, когда вы обновляете tableView «s объект источника данных и вызвать reloadData во viewDidLoad будет решить эту проблему.