UITableView从服务器获得响应后变为Nil

时间:2012-08-23 13:29:13

标签: iphone objective-c xcode uitableview

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

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

我在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>

2 个答案:

答案 0 :(得分: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时需要将委托设置为self:

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

      [class setVcDelegate: self];

      [class getResponse];          
 }

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

例如,属性应该是

@property (weak) id<ViewController1Protocol> vcDelegate; 

答案 1 :(得分:0)

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

图像中的红色区域未与表格视图相关联。它是空的。

enter image description here