Как добавить строку контакта из одного массива в другой

У меня есть массив, в котором хранятся все контакты с телефона. У меня есть UITableView, в котором я хочу отобразить все контакты. У меня возникли проблемы с отображением их в табличном представлении. Я создал новый массив и использовал приведенный ниже код для циклического просмотра массива контактов, извлечения из него строк и сохранения их в новом массиве (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', а также число и содержимое, добавляемые в массив contactNew, и все выглядит нормально.

Также я могу использовать что-то другое вместо:

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

Так что я могу напрямую использовать массив контактов вместо создания нового массива. Заранее спасибо.


person Tejas K    schedule 28.01.2016    source источник
comment
попробуйте [tableView reloadData] после цикла for   -  person    schedule 28.01.2016
comment
@Tejas, пожалуйста, перезагрузите таблицу после некоторой задержки, как код в моем ответе.   -  person Vvk    schedule 28.01.2016


Ответы (4)


Вам нужно перезагрузить tableView после создания массива, поэтому используйте [tableView reloadData] после цикла for

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

[tableview reloadData]; //Add this line

Надеюсь, это сработает.

person Community    schedule 28.01.2016

вам нужно перезагрузить 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];
});
person Vvk    schedule 28.01.2016

вам нужно перезагрузить таблицу в основном потоке после получения контактов... например: - dispatch_async(dispatch_get_main_queue(), ^{ [_table reloadData]; });

... и для вашего табличного представления напишите

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

...предоставьте ключ здесь.

person Amrut Gaikwad    schedule 03.05.2016

Вот несколько моментов, которые необходимо проверить, чтобы решить вашу проблему:

  • Первое, что вам нужно проверить, это методы просмотра таблицы погоды, вызываемые один раз после того, как вы добавили значения в новый массив? Если нет, попробуйте перезагрузить табличное представление после добавления значений в новый массив.
  • Если он вызывается правильно после добавления значений в новый массив, попробуйте NSLog значения в методе cellForRowAtIndexPath

Надеюсь, это поможет вам.

person Mayur    schedule 28.01.2016