をとしてNSMutableDictionary
使用してに値を格納および取得しようとすると失敗する可能性がある特定の理由はありますか?NSIndexPath
key
NSMutableDictionary
私は元々、のUITableViewCell
高さ ( self.cellHeights
)を格納するためにこれを実行しようとしましたUITableView
。をタップするたびに、その特定UITableViewCell
の に格納されている値に基づいて、セルが 2 つの異なる高さの間で拡大または縮小します。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:
via内でセルの高さを取得しようとすると、常に nil が返されます。これは、高さを格納するために使用される indexPath が、セルの高さを取得するために使用される indexPathと[self.cellHeights objectForKey:indexPath]
一致しないように見えるためです。このため、「同じ」インデックス パスの新しいオブジェクトが追加されます(その後増加するため明らかです)。indexPath.section
indexPath.row
self.cellHeights
self.cellHeights.count
これは、行 ( ) をキーとしてNSMutableDictionary にセルの高さを格納する場合には発生しません。[NSNumber numberWithInteger:indexPath.row]
indexPath