我有一个存储手机所有联系人的阵列。我有一个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数组而不是创建一个新数组。提前谢谢。
答案 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)
以下是您需要检查以解决问题的几点:
NSLog
方法中的cellForRowAtIndexPath
值希望它会对你有所帮助。