我试图将我的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;
}
答案 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,他可能需要的是核心数据。