这是我的情景, 我有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>
答案 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中的表格视图连接。
图像中的红色区域未与表格视图相关联。它是空的。