是否有任何特殊原因导致尝试在NSMutableDictionaryusing an NSIndexPathas a中存储和检索值key可能会失败?
我最初尝试这样做是为了将高度 ( )存储NSMutableDictionary为. 每次您点击 a时,该单元格将根据存储在该特定值中的值在两个不同的高度之间扩展或收缩:UITableViewCellself.cellHeightsUITableViewUITableViewCellNSMutableDictionaryindexPath
- (CGFloat)tableView:(UITableView *)tableView
heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSNumber *heightNSNumber = [self.cellHeights objectForKey:indexPath];
if (!heightNSNumber)
{
heightNSNumber = [NSNumber numberWithFloat:100.0];
[self.cellHeights setObject:heightNSNumber forKey:indexPath];
}
return [heightNSNumber floatValue];
}
- (void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[tableView deselectRowAtIndexPath:indexPath animated:YES];
NSNumber *heightNSNumber = [self.cellHeights objectForKey:indexPath];
if (!heightNSNumber)
{
heightNSNumber = [NSNumber numberWithFloat:100.0];
[self.cellHeights setObject:heightNSNumber forKey:indexPath];
}
if ([heightNSNumber floatValue] == 100.0)
{
[self.cellHeights setObject:[NSNumber numberWithFloat:50.0]
forKey:indexPath];
} else {
[self.cellHeights setObject:[NSNumber numberWithFloat:100.0]
forKey:indexPath];
}
[tableView beginUpdates];
[tableView endUpdates];
}
由于我不知道的原因,在tableView:didSelectRowAtIndexPath:via中获取单元格高度[self.cellHeights objectForKey:indexPath]就可以了。但是,尝试在tableView:heightForRowAtIndexPath:via中获取单元格高度[self.cellHeights objectForKey:indexPath]总是返回 nil,因为用于存储高度的 indexPath 似乎与用于获取单元格高度的 indexPath 不匹配,即使它们具有相同的值indexPath.section和indexPath.row。因此,“相同”索引路径的新对象被添加到self.cellHeights(因为此后self.cellHeights.count增加明显)。
当您使用行()作为键将单元格高度存储在 NSMutableDictionary 中时,不会发生这种情况[NSNumber numberWithInteger:indexPath.row]......所以这就是我现在正在做的事情,但我想了解为什么indexPath不能作为键工作。