使用 NSMutableArray 中的数据填充 UITableView

Posted

技术标签:

【中文标题】使用 NSMutableArray 中的数据填充 UITableView【英文标题】:Populating UITableView with data from NSMutableArray 【发布时间】:2013-02-21 05:08:57 【问题描述】:

我想用来自我的NSMutableArray 的数据填充我的UITableView,但它出现了异常。

例外:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSDictionaryM isEqualToString:]: unrecognized selector sent to instance 0xa2ba880'

我的 cellForRowAtIndexPath:

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

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) 
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    

    cell.textLabel.text = [callDetailArray objectAtIndex:indexPath.row];

    [cell setAccessoryType: UITableViewCellAccessoryDisclosureIndicator];

    return cell;

这是数组:

Array: (
        
        callId = 3;
        callKeyword = CALL100;
        callName = "Call to All";
        callNumber = 5908;
    
)

我想要发生的是UITaleView 中的单元格将显示callIdcallKeywordcallNamecallNumber 中的数据。

【问题讨论】:

@Nitin Gohel ha 为您指明了正确的方向。问题是您试图将字典放入期望字符串值的属性中。 【参考方案1】:

在你CellDetailArray 中的数据在Dictionary 中,这样你就可以从NSMutableArray 中获取详细信息,如下所示:-

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

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) 
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    
    NSMutableDictionary *d=(NSMutableDictionary*)[callDetailArray objectAtIndex:indexPath.row];
    cell.textLabel.text =[d valueForKey:@"callName"];

    [cell setAccessoryType: UITableViewCellAccessoryDisclosureIndicator];

    return cell;

如果您想在 TableCell 中显示所有四个值,则必须创建具有四个 UIlable 和 Sate 值的 customeCell,例如:-

YourLable1.text =[d valueForKey:@"callId"];

YourLable2.text =[d valueForKey:@"callKeyword"];

YourLable3.text =[d valueForKey:@"callName"];

YourLable4.text =[d valueForKey:@"callNumber"];

【讨论】:

关于这个:cell.textLabel.text =[d valueForKey:@"callName"];,我真的需要手动吗? 您像cell.textLabel.text =[d valueForKey:@"callName"]; 一样手动设置,因为您的数据进入 NSMutableDictionary 和 NSDictionary。如果你的数组像 myarray==(data1,data2,data3) 那么你的第一个方法工作正常。 你应该在字典上调用objectForKey:,而不是valueForKey:。或者使用现代语法:cell.textLabel.text = callDetailArray[indexPath.row][@"callName"];.【参考方案2】:

你使用下面的代码

cell.textLabel.text = [[callDetailArray objectAtIndex:indexPath.row]objectForKey:@"callName" ];

您正在尝试访问字典而不是字符串。 callDetailArray 包含字典数据。在字典中只有字符串可用,因此您必须使用 objectForKey 访问它

【讨论】:

使用此代码时,它就像一个魅力。我想做的是,在不同的单元格中显示callIdcallKeywordcallNamecallNumber 您必须尽可能多地创建标签。您可以使用相同的代码,但键和标签应该不同

以上是关于使用 NSMutableArray 中的数据填充 UITableView的主要内容,如果未能解决你的问题,请参考以下文章

在 iPhone 中从 NSMutableArray 填充数据

使用 CoreData 数据库填充 NSMutableArray

为啥这个 NSMutableArray 没有被填充?

如何使用输入的文本字段填充 NSMutableArray

从iOS中的两个不同的NSMutableArray中删除同一行

数据未写入 NSMutableArray