1

这是我的场景,我有 ViewController1 和 Class1(服务类)。

我通过在 ViewController1 中设置委托和数据源来在 nib 中加载 tableView。在 viewDidLoad 中,我在另一个类(Class1)中调用 networkCall 函数。在 Class1 中,收到响应后,它会将响应数据数组传递给 ViewController1 中的函数,其中数据应填充到 tableview 中。

我已经在 xib 中连接了数据源和委托。问题:当我在 ViewController1 中以数组形式获得响应时,UITableView 变为 nil,我无法使用 reloadData,但我的数组包含来自服务器的项目列表。

这是我的代码

视图控制器1

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

2 回答 2

2

您正在创建新实例,ViewController1而不是使用已加载的实例。

您可以执行以下操作:

对于 A 类:

界面:

@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时需要将委托设置为 self:

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

      [class setVcDelegate: self];

      [class getResponse];          
 }

这不是最好的实现,但应该让你知道如何去做。

例如,财产可能应该是

@property (weak) id<ViewController1Protocol> vcDelegate; 
于 2012-08-23T13:51:58.847 回答
0

您必须将您的tableView与 xib 中的表视图连接起来。

图像中的红色区域与您的表格视图没有连接。它是空的。

在此处输入图像描述

于 2012-08-23T13:33:47.360 回答