Есть ли какая-либо особая причина, по которой попытка сохранить и получить значение в NSMutableDictionary с помощью NSIndexPath, поскольку key может завершиться с ошибкой?
Я изначально попытался сделать это, чтобы сохранить NSMutableDictionary высот UITableViewCell (self.cellHeights) для UITableView. Каждый раз, когда вы нажимаете UITableViewCell, эта ячейка будет либо расширяться, либо сокращаться между двумя разными высотами на основе значения, хранящегося в NSMutableDictionary для этого конкретного indexPath:
- (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: через [self.cellHeights objectForKey:indexPath] работает просто отлично. Тем не менее, попытка получить высоту ячейки внутри tableView:heightForRowAtIndexPath: через [self.cellHeights objectForKey:indexPath] всегда возвращает nil, потому что кажется, что indexPath, используемый для хранения высоты, не соответствует индексу, который используется для извлечения высоты ячейки, даже если они имеют одинаковые значения для indexPath.section и indexPath.row. Из-за этого к self.cellHeights добавляется новый объект для "одинакового" пути указателя (как видно, так как self.cellHeights.count увеличивается после этого).
Это не происходит, когда вы храните высоты ячеек в NSMutableDictionary, используя строку ([NSNumber numberWithInteger:indexPath.row]) в качестве ключа... так, что я делаю это сейчас, но я хотел бы понять, почему indexPath не работает как ключ.