1

我有一个数组,用于存储手机中的所有联系人。我有一个 UITableView,我想在其中显示所有联系人。我在表格视图中显示它们时遇到问题 oi 创建了一个新数组,并使用下面的代码循环遍历联系人数组并从中获取字符串并将它们存储在新数组中 (contactsNew)

for (CNContact *contact in contacts)
    {
        NSString *string = [formatter stringFromContact:contact];
        [contactsNew addObject:string];
        NSLog(@"contact = %@", string);
    }

问题是所有联系人都显示在日志中,但我仍然无法在表格视图中显示联系人。

- (NSInteger)tableView:(UITableView *)tableView    
numberOfRowsInSection:(NSInteger)section
{
return [contactsNew count];
}

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

static NSString *simpleTableIdentifier = @"SimpleTableCell";

UITableViewCell *cell = [tableView   
dequeueReusableCellWithIdentifier:simpleTableIdentifier];

if (cell == nil) {
    cell = [[UITableViewCell alloc]   
initWithStyle:UITableViewCellStyleDefault   
reuseIdentifier:simpleTableIdentifier];
}
cell.textLabel.text = [contactsNew objectAtIndex:indexPath.row];
return cell;
}

我检查了“字符串”变量的值以及添加到 contactsNew 数组的数量和内容,一切看起来都很好。

我也可以用其他东西代替:

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

这样我就可以直接使用联系人数组而不是创建一个新数组。提前致谢。

4

5 回答 5

1

您需要在延迟一段时间后重新加载 tableview。像这样使用

 for (CNContact *contact in contacts)
{
    NSString *string = [formatter stringFromContact:contact];
    [contactsNew addObject:string];
    NSLog(@"contact = %@", string);
}

//  add after Delay 0.5 if its not worked then 1.0

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
    [tableview reloadData];
});
于 2016-01-28T07:18:49.683 回答
1
Try this

for (CNContact *contact in contacts)
{
        NSString *string = [formatter stringFromContact:contact];
        [contactsNew addObject:string];
        NSLog(@"contact = %@", string);
}
[tableview reloadData];
于 2016-01-28T07:01:36.033 回答
1

您需要在创建数组后重新加载 tableView,因此在 for 循环后使用 [tableView reloadData]

for (CNContact *contact in contacts)
{
    NSString *string = [formatter stringFromContact:contact];
    [contactsNew addObject:string];
    NSLog(@"contact = %@", string);
}

[tableview reloadData]; //Add this line

希望这会奏效。

于 2016-01-28T07:05:49.253 回答
1

获取联系人后,您必须在主线程上重新加载表格...例如:- dispatch_async(dispatch_get_main_queue(), ^{ [_table reloadData]; });

...并为您的表格视图写

cell.textLabel.text = [contactsNew objectAtIndex:indexPath.row]valueForKey:@"keys";

...在此处提供密钥。

于 2016-05-03T08:03:51.807 回答
0

您需要检查以下几点才能解决您的问题:

  • 您需要检查的第一件事是在将值添加到新数组后调用一次的天气表视图方法?如果没有,在向新数组添加值后尝试重新加载表视图。
  • 如果在将值添加到新数组后正确调用,请尝试方法中的NSLogcellForRowAtIndexPath

希望它会帮助你。

于 2016-01-28T07:15:25.840 回答