TableView存在奇怪的问题。我的应用程序崩溃,因为noOfRow计数与cellForRow调用次数不同。一切都在两者之间完美地工作,有时会发生一些事情,我调试它,发现在调用cellForRow时,tableView-datasource中我发送没有行数的列表是更改。
对于Ex: -
如果noOfRows是14,具有相同的列表,那么
cellForRow只获得该列表的4行。
代码片段如下。我已经添加了日志进行调试。
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
if (self.isSearchOn) {
NSLog(@"search number of rows: %d",[[self.searchMap allKeys] count]);
return [[self.searchMap allKeys] count];
}
NSLog(@"map number of rows: %d",[[self.drugsMap allKeys] count]);
return [[self.drugsMap allKeys] count] + 1; //1 for footer cell.
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
if (!self.isSearchOn && indexPath.row == [[self.drugsMap allKeys] count]) {
return self.footerCell;
}
MCIPDrugCell *drugCell = [tableView dequeueReusableCellWithIdentifier:[MCIPDrugCell cellIdentifier]];
if(drugCell == nil)
drugCell = [MCIPDrugCell newInstance];
drugCell.parentController = self;
drugCell.delegate = self;
drugCell.handler = self.handler;
drugCell.currentIndex = self.selectedGeneric;
NSArray *keys = (self.isSearchOn)?[[self.searchMap allKeys] sortedList]:[[self.drugsMap allKeys] sortedList];
NSLog(@"searchOn %d\n keys: %@",self.isSearchOn, keys);
NSString *genericName = [keys objectAtIndex:indexPath.row];
NSArray *brandsByGeneric = (self.isSearchOn)?[self.searchMap objectForKey:genericName]:[self.drugsMap objectForKey:genericName];
drugCell = [MCIPDrugCell configureDrugCell:drugCell genericName:genericName withDrugList:brandsByGeneric forIndex:indexPath.row withSelectedIndex:self.selectedGeneric];
drugCell.btnInfo.tag = indexPath.row;
[drugCell.btnInfo addTarget:self action:@selector(moveInstruction:) forControlEvents:UIControlEventTouchUpInside];
drugCell.backgroundColor = [UIColor clearColor];
return drugCell;
}
调试日志如下: -
2017-03-03 16:06:54.484 mCura[12934:1098450] search number of rows: 14
2017-03-03 16:06:54.536 mCura[12934:1098450] searchOn 1
keys: (
"#",
Cardace,
Ramipril,
"Ramipril + Hydrochlorthiazide"
)
2017-03-03 16:06:54.544 mCura[12934:1098450] searchOn 1
keys: (
"#",
Cardace,
Ramipril,
"Ramipril + Hydrochlorthiazide"
)
2017-03-03 16:06:54.552 mCura[12934:1098450] searchOn 1
keys: (
"#",
Cardace,
Ramipril,
"Ramipril + Hydrochlorthiazide"
)
2017-03-03 16:06:54.560 mCura[12934:1098450] searchOn 1
keys: (
"#",
Cardace,
Ramipril,
"Ramipril + Hydrochlorthiazide"
)
2017-03-03 16:06:54.568 mCura[12934:1098450] searchOn 1
keys: (
"#",
Cardace,
Ramipril,
"Ramipril + Hydrochlorthiazide"
)
在第五次调用cellForRow时,它会崩溃,因为[self.searchMap allKeys]计数已更改为4,因为您看到在日志中打印了键。我怎样才能克服这个问题。
由@CodeChanger configureDrugCell
提出请求+(MCIPDrugCell *)configureDrugCell:(MCIPDrugCell *)cell
genericName:(NSString *)genericName
withDrugList:(NSArray *)drugList
forIndex:(NSInteger)index
withSelectedIndex:(NSInteger)selectedIndex {
cell.currentIndex = selectedIndex;
cell.btnGenericName.tag = index;
cell.btnwriteprescription.tag = index;
cell.collectionView.tag = index;
cell.genericIndex = index;
cell.genericArray = [drugList mutableCopy];
[cell.btnGenericName setTitle:genericName forState:UIControlStateNormal];
[cell.collectionView reloadData];
return cell;
}