Есть ли какая-либо особая причина, по которой попытка сохранить и получить значение в 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
не работает как ключ.