【问题标题】:How to get NSDictionary data into a UITableView如何将 NSDictionary 数据放入 UITableView
【发布时间】:2013-03-06 12:34:26
【问题描述】:

我有 2 个 NSArray,我试图在 NSDictionary 中将它们链接在一起,以便每个 providerName 都有一个与之关联的 providerId

我希望这两个数组使用self.providersDict = [NSDictionary dictionaryWithObjects:providerName forKeys:providerId]; 相互关联,然后providerName 显示为表格单元格标题,id 显示为表格单元格子标题。

目前我无法获取 UITable 上显示的数据,甚至无法使用以下方法注销字典:

   for (id key in self.providersDict) {
    NSLog(@"key: %@, value: %@", key, [self.providersDict objectForKey:key]);
}

在.h中声明:

NSArray *providerName;
NSArray *providerId;

@property (nonatomic, strong) NSDictionary *providersDict;

在viewDidLoad中:

    providerName = [NSArray arrayWithObjects:@"provider1", @"provider2", @"provider3", nil];
    providerId = [NSArray arrayWithObjects:@"1", @"2", @"3", nil];

    self.providersDict = [NSDictionary dictionaryWithObjects:providerName
                                                           forKeys:providerId];

UITable 方法:

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [[self.providersDict allKeys] count];
}


-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{



 static NSString *unifiedID = @"aCellID";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:unifiedID];
    if (!cell) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:unifiedID];

}

for (id key in self.providersDict) {
    NSLog(@"key: %@, value: %@", key, [self.providersDict objectForKey:key]);
}

NSString *providerNameString = [self.providersDict objectForKey:@"provider"];
NSString *providerIdString = [self.providersDict objectForKey:@"object"];
cell.textLabel.text  = providerNameString;
cell.detailTextLabel.text  = providerIdString;


return cell;

}

感谢您的帮助。

【问题讨论】:

  • 您的要求是什么?你能解释一下吗?
  • 我认为上述方法可行。我希望这两个数组使用 self.providersDict = [NSDictionary dictionaryWithObjects:providerName forKeys:providerId]; 相互关联。然后 providerName 显示为表格单元格标题,id 显示为表格单元格子标题。 nslog 语句没有运行。我不知道为什么。
  • 我假设您的 providersDict 中没有名为“object”和“provider”的键,键是 1,2,3 吗?而且你不能像你试图为日志做的那样枚举字典......
  • 我认为字典中的键和值是互换的。检查一下。
  • 你设置了tableView的代理吗?我不认为你的委托方法被调用

标签: iphone ios objective-c uitableview nsdictionary


【解决方案1】:
NSString *providerNameString = [self.providersDict objectForKey:@"provider"];
NSString *providerIdString = [self.providersDict objectForKey:@"object"];

您已使用键 1、2、3 初始化 self.providersDict。所以您应该尝试使用这些键获取 providerNameString,而不是 @"provider"providerIdString 相同。

试试

NSString *key = [self.providersDict allKeys][indexPath.row];

NSString *providerNameString = self.providersDict[key];
NSString *providerIdString = key;
cell.textLabel.text  = providerNameString;
cell.detailTextLabel.text  = providerIdString;

一旦你的self.providersDict 被初始化,不要忘记调用[tableView reloadData];

至于建议你为什么不为Provider 创建一个带有id、名称和其他信息的模型类。您可以将每个提供程序添加到一个数组中,这会让您的生活更轻松。

【讨论】:

  • 您已经通过投票表示感谢。但是,如果您可以尝试为 Provider 创建模型对象 :)
【解决方案2】:

出于您的目的,您不需要任何NSDictionary,只需使用两个NSArrays 填充UITableView 中的数据

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{
    static NSString *unifiedID = @"aCellID";
    UITableViewCell *cell = 
    [tableView dequeueReusableCellWithIdentifier:unifiedID];

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

    NSString *providerNameString = [providerName objectAtIndex:indexPath.row];
    NSString *providerIdString = [providerId objectAtIndex:indexPath.row];
    cell.textLabel.text  = providerNameString;
    cell.detailTextLabel.text  = providerIdString;
    return cell;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-01
    • 2013-04-25
    • 1970-01-01
    • 1970-01-01
    • 2013-03-31
    相关资源
    最近更新 更多