如何将联系人字符串从一个数组添加到另一个数组

时间:2016-01-28 06:54:21

标签: ios objective-c uitableview cncontact cncontactstore

我有一个存储手机所有联系人的阵列。我有一个UITableView,我想在其中显示所有的联系人。我在表格视图中显示它们时遇到了问题o我创建了一个新数组,并使用下面的代码循环遍历contacts数组并从中获取字符串并将它们存储在新数组中(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;
}

我检查过' string'的值变量以及添加到contactsNew数组的数量和内容,一切看起来都很好。

我也可以用别的东西代替:

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

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

5 个答案:

答案 0 :(得分:1)

Try this

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

答案 1 :(得分: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

希望这会奏效。

答案 2 :(得分: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];
});

答案 3 :(得分:1)

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

...并为您的表视图写

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

...在这里提供关键。

答案 4 :(得分:0)

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

  • 首先需要检查的是在向新数组添加值后调用一次的weather tableview方法?如果在向新数组添加值之后没有尝试重新加载表视图。
  • 如果在向新数组添加值后正确调用,请尝试NSLog方法中的cellForRowAtIndexPath

希望它会对你有所帮助。