iOS:cellForRowAtIndexPath不会在numberOfRowsInSection后立即调用
我有我的可用数据填充numberOfRowsInSection
内的当前部分。然后我希望它调用cellForRowAtIndexPath
,以便我可以使用这些数据。我在numberOfRowsInSection
我覆盖了上一节的数据。做NSLog
它显示numberOfRowsInSection
运行的第一个cellForRowAtIndexPath
之前的所有149个部分...为什么?iOS:cellForRowAtIndexPath不会在numberOfRowsInSection后立即调用
我已经删除了调用reloadData
,因为我看到这是其他人在堆栈溢出问题,但没有解决问题。
每吉姆我正在添加我在做什么。
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
NSMutableArray *tempArray = [NSMutableArray array];
FMResultSet *appointmentResults = [[DataClass getDB] executeQuery:@"SELECT * FROM Appointments WHERE date = ?",[self.appointmentDates objectAtIndex:section]];
int rowCount = 0;
while ([appointmentResults next]) {
[tempArray addObject:[appointmentResults resultDict]];
rowCount++;
}
self.appointments = tempArray;
NSLog(@"Appointments: %@ - %i", [self.appointmentDates objectAtIndex:section], rowCount);
return rowCount;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
//Parse the appointments for the current section and display them
}
从一般意义上说,依靠Apple以任何特定模式调用委托函数并不是一个好习惯。
尤其是UITableView,它只会在需要知道的基础上请求数据。 UITableView更需要知道整个表中有多少部分和行,以便它可以正确处理诸如滚动位置和滚动条大小等内容,而实际的单元格内容可以被允许滑动,直到他们即将进入用户的观点。
您无法对numberOfRowsInSection进行调用,因为这意味着系统不想知道某个节中有多少行。 :)
我的猜测是,UITableView的缓存数据,以便通过运行一次,并且得到的一切
其U的行为ITableView。
它只会加载那些可见的单元格。要计算它,它会在显示它们之前询问每个部分的行数。
最初不会调用不可见的单元格cellForRowAtIndexPath
。一旦用户滚动,它将被调用。
如果您想刷新/更改您的表格,您应该更改model
中的适当数据,然后调用tableView的[tableView reload....];
方法之一(取决于您正在尝试更改的内容)。
UITableViewDelegate
方法(特别是那些返回的行数,段......)不应该做比他们的名字所说的更多的事情,否则最终会导致您的表格或可能应用程序崩溃......
当您拨打[tableView reload....];
时,您的内容提供方法将被调用,并且这是提供内容的地方。
我也得到同样的情况。我认为原因是表格的行返回的高度为0.
@jostster为什么这会对您的应用程序有所帮助? – bneely 2012-02-23 17:17:44
你所描述的听起来很奇怪。首先,你不应该在'numberOfRowsInSection'中覆盖任何东西。它应该只返回一个整数。可能需要更准确的细节。但我相信,一旦UITableView将这些委托方法踢掉,它就打算更新其视图中的某些内容。但它应该只是询问可见的部分和行。 – Jim 2012-02-23 17:20:10
@Jim我修改了我的OP来显示我在做什么。 – Bot 2012-02-23 17:22:51