【问题标题】:Populating UITableView cells填充 UITableView 单元格
【发布时间】:2012-07-25 15:21:37
【问题描述】:

好的,所以我在这个函数中写了一些代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    NSLog(@"tableviwcell is getting called");
    properties = [NSUserDefaults  standardUserDefaults];

    NSDictionary *events_dict = [properties objectForKey:@"events_dict"];
    NSDictionary *events = [events_dict objectForKey:@"event"];

    am_participants = [events objectForKey:@"amParticipants"];
    pm_participants = [events objectForKey:@"pmParticipants"];

    UITableViewCell *cell = nil;
    cell = [tableView dequeueReusableCellWithIdentifier:@"currentCell"];
    if(cell == nil){
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"currentCell"];
    }
    int sizeofam = [am_participants count];
    int sizeofpm = [pm_participants count];
    NSMutableArray *participants  =[[NSMutableArray alloc] init];
    NSLog(@"size of am: %i", sizeofam);
if(sizeofam > 0 && sizeofpm > 0){
    for(int i = 0; i < sizeofam; i++){
        NSDictionary *ampart_dict = [am_participants objectAtIndex:i];
        NSString *ampart_email = [ampart_dict objectForKey:@"email"];
        NSString *ampart_email_extra = [@"am" stringByAppendingString:ampart_email];
        [participants addObject:ampart_dict];
    }

    for(int i = 0; i < sizeofpm; i++){
        NSDictionary *pmpart_dict = [pm_participants objectAtIndex:i];
        NSString *pmpart_email = [pmpart_dict objectForKey:@"email"];
        NSString *pmpart_email_extra = [@"pm" stringByAppendingString:pmpart_email];
        [participants addObject:pmpart_dict];
        NSLog(@"%@", participants);
    } 

    int sizeofparticipants = [participants count];

    for(int i = 0; i < sizeofparticipants; i++){
        NSString *participanti = [[participants objectAtIndex:i] objectForKey:@"email"];
        for(int j = 0; j < sizeofparticipants; j++){
            NSString *participantj = [[participants objectAtIndex:j] objectForKey:@"email"];

            if([participanti isEqualToString:participantj]){
                NSLog(@"Participant j:  %@", participantj);
                [participants removeObjectAtIndex:j];
                sizeofparticipants = [participants count];
            }
        }
    }

基本上我需要将两个数组 am_participants 和 pm_participants 合并到一个参与者数组中。数组中的每个对象都是一个包含各种值的字典,例如姓名、电子邮件等。然后我必须从列表中删除任何重复的值(例如,如果有人在 am 列表和 pm 列表中。我通过删除来做到这一点如果他们的电子邮件地址在任一列表中相同,则值。

在此之后,我需要通过使用参与者列表填充单元格来在一个列表中显示名为“参与者”的新参与者数组。

我已将单元格数设置为 30。

但是,当向下滚动列表时,单元格会随机填充不同的名称,因为认为数组位置正在移动以及出现重复值。

谁能解释我做错了什么?

谢谢!

【问题讨论】:

  • 随机是什么意思?以及为什么要在 cellForRowAtIndexPath 数据源方法中修改数据模型?
  • 当您上下滚动 UITableView 时,您会看到参与者的姓名随机排列并随机排列。他们也在列表中重复(?)我不知道为什么。

标签: iphone uitableview nsmutablearray


【解决方案1】:

上面没有提到单元格分配代码,但我假设您正在分配来自participants 的值作为单元格的内容,如说明的那样。问题是你在cellForRowAtIndexPath: 中创建你的数组。每次要显示新单元格时都会调用此方法,因此,您正在为每一行重新创建参与者。您需要将上面的代码移动到viewDidLoadviewDidAppear

【讨论】:

  • 是的@KDaker,这就是为什么我问他,为什么他要更改 tableview 数据源方法中的数据模型。这是非常错误的做法。
  • 你在viewDidLoad设置后有没有给[tableView reloadData]打电话?
猜你喜欢
  • 2012-05-06
  • 1970-01-01
  • 1970-01-01
  • 2018-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多