我想在NSDictionary中将2个NSArray链接在一起,以便每个 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;

}

谢谢您的帮助。

最佳答案

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;

而且,一旦您的[tableView reloadData];初始化完毕,别忘了调用self.providersDict

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

10-07 19:27