我的情况:
我有一个NSDictionary对象。由NSNumber提供。值是自定义对象。
我想将字典值放入UITableView中。据我所知,UITableView要求对其源集合进行索引,以便在调用cellForRowAtIndexPath时,可以使用indexPath查找该值。
问题是当调用didSelectRowAtIndexPath时,我想从字典中查找对象,但是我没有密钥。我所拥有的只是indexPath.row。
我的解决方案: 我创建了一个键数组。我使用数组的索引来获取密钥,然后使用密钥将对象从字典中取出。
我的问题: 这似乎有点草率,特别是因为这是一个例行任务(填充UITableView,然后当有人触摸一个单元格时响应)。这是它的设计方式还是更好的方式?
答案 0 :(得分:5)
问题是字典没有订单,而表视图则没有。 this question的答案应该为您提供一些处理此问题的替代方法。
答案 1 :(得分:3)
如另一个答案所述,NSDictionary
的密钥未被订购,因此您无法保证按特定顺序获取行。也就是说,使用字典与UITableView
一起使用非常容易。
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// tableview cell setup
NSArray* keys = [self.data allKeys];
cell.textLabel.text = [self.data objectForKey:[keys objectAtIndex:indexPath.row]];
return cell;
}
如果您需要根据您在NSDictionary
中输入的方式订购列表,来自 Cocoa With Love 的Matt Gallagher提供了一个优雅的解决方案,其中{{1} }。你可以阅读它here。