Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UITableview委托和数据源调用了两次_Ios_Objective C_Delegates_Tableview_Datasource - Fatal编程技术网

Ios UITableview委托和数据源调用了两次

Ios UITableview委托和数据源调用了两次,ios,objective-c,delegates,tableview,datasource,Ios,Objective C,Delegates,Tableview,Datasource,我很难使用tableview数据源和委托方法。如果用户导航到我正在调用的表视图控制器,我就有了一个表视图。请求完成后,成功地重新加载了表视图部分,但调用了两次tableview:cellForRowAtIndexPath:indexPath,这是一个基于块的服务。这是我的密码 viewDidLoad 但是CellForRowatinedexPath self.data值第一次为空 - (UITableViewCell *)tableView:(UITableView *)tableView ce

我很难使用tableview数据源和委托方法。如果用户导航到我正在调用的表视图控制器,我就有了一个表视图。请求完成后,成功地重新加载了表视图部分,但调用了两次tableview:cellForRowAtIndexPath:indexPath,这是一个基于块的服务。这是我的密码

viewDidLoad

但是CellForRowatinedexPath self.data值第一次为空

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
      NSLog(@"%@", self.data); // first time it print null 
}

有什么想法吗?非常感谢你

您是否在viewDidLoad中初始化了数据数组?如果没有,它将返回null

如果要避免两次调用tableview,请尝试以下操作:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

    if(!data)
        return 0;

    return yourNumberOfSections;
}

您是否在viewDidLoad中初始化了数据数组?如果没有,它将返回null

如果要避免两次调用tableview,请尝试以下操作:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

    if(!data)
        return 0;

    return yourNumberOfSections;
}
调用-tableView:cellforrowatinexpath:的原因很简单,因为在您从web服务接收任何数据之前,视图已加载,并且表正在尝试填充自身。在这一点上,您不会将self.data设置为任何有用的值,因此您会得到null。当您的web服务返回一些数据时,完成例程会导致重新加载相关部分,并且表会绘制数据。

听起来像是-tableView:cellforrowatinexpath:被调用,原因很简单,因为在您从web服务收到任何数据之前,视图已加载,并且表正在尝试填充自身。在这一点上,您不会将self.data设置为任何有用的值,因此您会得到null。当您的web服务返回一些数据时,完成例程会导致重新加载相关部分,并且表格会绘制数据。

当需要在屏幕上呈现单元格时,tableview会调用CellForRowatineXpath。如果tableview在包含任何数据之前出现,则self.data将为空

例如,在viewDidLoad集合[[self.data=NSMutableArray alloc]init]中以及UIITableView的datasource/delegate方法中,它应该正确地将numberOfRows等返回为零,直到web服务填充数据。

当需要在屏幕上呈现单元格时,tableview调用cellForRowAtIndexPath。如果tableview在包含任何数据之前出现,则self.data将为空


例如,在viewDidLoad集合[[self.data=NSMutableArray alloc]init]中,在UIITableView的datasource/delegate方法中,在web服务填充数据之前,它应该正确地将numberOfRows等返回为零。

抱歉,数据不是数组。但无论如何,如果您没有初始化该数组或结果数组,它将返回null.Sorry。我知道。但它必须从api中填充。抱歉,数据不是数组。但无论如何,如果您没有初始化该数组或结果数组,它将返回null.Sorry。我知道。但它必须从api中填充。UITableView的dataSource方法将在屏幕按@Kex建议加载后调用,因此第一次它为null,第二次数据重新加载将从异步块内部触发。请尝试将重新加载的部分代码放在self.data=result[0]的正下方;不在调度块中。@Kex我一直在尝试。很抱歉澄清一下,它是否打印任何值?它在第一个table调用上没有打印任何内容,但是第二个调用是does?我现在明白了,正如下面提到的,它被调用了两次。最初在加载时,然后在web获取后在块中。这个代码没有问题。是否希望tableview在获得数据或其他信息之前不进行初始化?UITableView的dataSource方法将在屏幕按@Kex建议加载后调用,因此它第一次为null,第二次数据重新加载将从异步块内部触发。请尝试将重新加载的部分代码放在self.data=result[0]的正下方;不在调度块中。@Kex我一直在尝试。很抱歉澄清一下,它是否打印任何值?它在第一个table调用上没有打印任何内容,但是第二个调用是does?我现在明白了,正如下面提到的,它被调用了两次。最初在加载时,然后在web获取后在块中。这个代码没有问题。是否希望在获得数据或其他信息之前不要初始化tableview?