NSDictionary allkeys到UITableViewCell

时间:2014-03-04 23:51:16

标签: ios objective-c uitableview

我试图将我的NSdictionary值转换为UITableViewCell。这是我的字典格式:

 {
date = "3/4/14, 3:33:01 PM Pacific Standard Time";
weight = 244;
}

这是我用来填充我的uitableview的代码(不起作用)。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *simpleTableIdentifier = @"WeightCell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
}


NSArray* allKeys = [weights allKeys];

NSDictionary *obj = [allKeys objectAtIndex: indexPath.row];

cell.textLabel.text = [obj objectForKey: @"date"];
cell.detailTextLabel.text = [obj objectForKey:@"weight"];

return cell;
}

3 个答案:

答案 0 :(得分:2)

你应该尝试在tableView本身之外的tableView初始化数组......

- (void)viewDidLoad
{
 [super viewDidLoad];

 _allKeys = [[NSMutableArray alloc] initWithArray:[weights allKeys]];

}

初始化数据后,您可以在整个过程中访问它。还要了解tableview需要多少行。

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [_allKeys count];
}

然后,当您将数组访问到字典时,它保留了行数并可以正确访问它。

NSDictionary *obj = [_allKeys objectAtIndex: indexPath.row];

cell.textLabel.text = [obj objectForKey: @"date"];
cell.detailTextLabel.text = [obj objectForKey:@"weight"];

从我所看到的字典无法访问indexPath.row中的数组,因为在tableView中使用它之前没有在任何地方初始化数组。

希望有所帮助,T

答案 1 :(得分:1)

其他一些海报有很好的建议。但是,这一行:

NSDictionary *obj = [allKeys objectAtIndex: indexPath.row];

错了。 allKeys是一个字典键的数组,可能是字符串。

所以,你想要这样的代码:

NSString *thisKey = allKeys[indexPath.row];
NSDictionary *obj = weights[thisKey];

请注意,我使用的是新的Objective C文字语法。表达式weights[thisKey]相当于[weights objectForKey: thisKey]

答案 2 :(得分:1)

我没有看到weights对象的定义。如果您想继续将NSDictionary添加到数组中,则需要使用NSMutableArray,并且您可能希望通过在类上将其设置为@property来实现此目的。假设你这样添加:

@property (strong, nonatomic) NSMutableArray *weights;

然后,在tableView:cellForRowAtIndexPath:方法中,您希望使用NSDictionary获取与该行对应的self.weights[indexPath.row]。另外,在使用它之前不要忘记实例化weights,否则它将返回nil并且不会添加任何对象。

P.S。:用户提供了一些上下文here,他可能需要的是核心数据。