2012-08-23 2 views
1

Это мой сценарий, У меня есть ViewController1 и Class1 (класс обслуживания).UITableView становится Nil После получения ответа от сервера

Я загружаю таблицуView в nib, устанавливая делегат и источник данных в ViewController1. В viewDidLoad я вызываю функцию networkCall в другом классе (Class1). В Class1 после получения ответа он передаст массив данных ответа функции в ViewController1, где данные должны быть заполнены в виде таблицы.

У меня есть источник данных и делегат в xib. Проблема: Когда я получаю ответ в виде массива в ViewController1, UITableView становится nil, я не могу использовать reloadData, но мой массив содержит список элементов с сервера.

Вот мой код

ViewController1

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    ClassA *class = [[ClassA alloc]init]; 
    [class getResponse]; 

} 

//This method is calling from ClassA using delegate 
-(void)responseData:(NSArray*)arrayList 
{ 
//arrayList have response data 
[tableView reloadData];//here tableView becomes nil. 
} 


- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    return 1; 
} 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    NSLog(@"array count %d",array.count);//has number of items(for me, its 3). 
    return array.count; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 



    static NSString *CellIdentifier = @"TableView"; 


    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
    } 


    cell.textLabel.text = @"dsds"; 

    return cell; 
} 

Tableview звонит первый раз.

В ViewController1 в интерфейсе, я настройка протоколов

<UITableViewDelegate,UITableViewDataSource> 
+0

в '(пустоты) метод responseData' попытаться' yourTableView = [[UITableView Alloc] инициализации]; [yourTableView reloadData]; ' – RomanHouse

+0

. Кажется, вы не устанавливаете свой контроллер представления в качестве делегата для класса ClassA * в свой' - (void) viewDidLoad'. Как именно вы вызываете '- (void) responseData: (NSArray *) arrayList' из' ClassA'? – Vladimir

+0

@Vladimir: id view1 = [[ViewController1 alloc] init]; [view1 responseData: objects]; это то, что я звоню – Anish

ответ

2

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

вы можете сделать следующее:

для ClassA:

интерфейс:

@interface ClassA : ... 
    @property (weak) ViewController1 * vcDelegate; 
... 
@end 

реализация:

@implementation ClassA 
    @synthesize vcDelegate; 
... 
@end 

и вместо

id<ViewController1Protocol>view1 = [[ViewController1 alloc]init]; 
    [view1 responseData:objects]; 

вызов

[vcDelegate responseData:objects]; 

В вашем ViewController, при создании ClassA вам нужно установить делегата для себя:

- (void)viewDidLoad 
{ 
     [super viewDidLoad]; 
     ClassA *class = [[ClassA alloc]init]; 

     [class setVcDelegate: self]; 

     [class getResponse];   
} 

Это не лучшая реализация, но должно дать вам представление о том, как это сделать.

Например, свойство должно быть, вероятно,

@property (weak) id<ViewController1Protocol> vcDelegate; 
+0

работает как шарм. я забыл думать о новом alloc создаст новый экземпляр // id view1 = [[ViewController1 alloc] init]; Спасибо за ответ ур – Anish

+0

рад помочь =) – Vladimir

0

Вы должны подключить tableView с учетом таблицы в XIb.

Красная область на изображении не связана с вашим столом. Он пуст.

enter image description here

+0

Я связался с xib. проблема заключается в том, когда я загружаю viewcontroller1, вызовут методы делегата tableview. но когда я получаю ответ от сервера в функции responseData, tableView становится nil, я не могу использовать reloadData. – Anish

+0

@ Если вы подключили источник данных и делегировали должным образом, и поэтому эти методы вызывают. вам нужно подключить «IBOutlet» с реферируемым выходом в xib –

+0

, но после получения ответа от сервера, tableview становится nil . это то, что я видел. поэтому, когда я использую reloadData, tableView не получает вызов. – Anish

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