Сортировка табличного представления в алфавитном порядке с объектами и отображение алфавитных заголовков табличного представления в виде контактной книги

Я работаю над списком контактов для своих приложений для iphone. Я создал собственный класс объектов, который содержит следующие атрибуты.

  • Имя
  • Фамилия
  • Id

Теперь я хочу сделать список контактов, как список контактов iphone. Итак, с A-B-C-D-E-... в качестве заголовков разделов таблицы. Я следовал этому руководству. Но он просто работает со струнами. Моя проблема лежит внутри CellForRow. Здесь вы можете увидеть, какой у меня банкомат.

   NSString *alphabet = [firstIndex objectAtIndex:[indexPath section]];

//---get all states beginning with the letter---
NSPredicate *predicate =
[NSPredicate predicateWithFormat:@"SELF beginswith[c] %@", alphabet];
NSLog(@"list content is here %@",[listContent valueForKey:@"name"]);
NSArray *contacts = [[listContent valueForKey:@"name"] filteredArrayUsingPredicate:predicate];
NSLog(@"Contacts array is %@",contacts);

    Contact *contact = nil;
    contact = [contacts objectAtIndex:[indexPath row]];
    NSLog(@"contact is in de else %@",contact.name);
    NSString *text = [NSString stringWithFormat:@"%@ %@",contact.name,contact.firstName];
    cell.textLabel.text = text;


   [cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];

Я вылетаю в первой строке со следующим журналом

2013-02-07 10:52:47.963 Offitel2[7807:907] list content is here (
    Claes,
    Geelen,
    Verheyen
)
2013-02-07 10:52:47.964 Offitel2[7807:907] Contacts array is (
    Claes
)
2013-02-07 10:52:47.964 Offitel2[7807:907] -[__NSCFString name]: unrecognized selector sent to instance 0x208e2c20
2013-02-07 10:52:47.965 Offitel2[7807:907] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString name]: unrecognized selector sent to instance 0x208e2c20'

Может ли кто-нибудь помочь мне с этим?

С уважением


person Steaphann    schedule 07.02.2013    source источник


Ответы (1)


Следуй этим шагам:

  • создайте индексный массив алфавита со всем начальным алфавитом слов, которые вы собираетесь заполнить
  • Теперь рассортируйте:

    //sorting for english language
    indexAlphabetArray = (NSMutableArray *)[indexAlphabetArray sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
    
  • Теперь реализуйте

    -(NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
    {
        return indexAlphabetArray;
    }
    
  • Последнее предложение, возьмите словарь всех имен и имени группы с первой буквой в качестве ключа в словаре, например:

    nameDictionary:{
        A:(
           Astart,
           Astop,
         )
        b:(
           bstart,
           bstop,
         )
    }
    
  • Таким образом indexAlphabetArray = [nameDictionary allKeys];

Изменить: давайте сделаем это проще для вас:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [[nameDictionary valueForKey:[indexAlphabetArray objectAtIndex:section]] count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *kCellID = @"cellID";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellID];
    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:kCellID];
    }
    NSArray *nameArray = [nameDictionary valueForKey:[indexAlphabetArray objectAtIndex:indexPath.section]];
    cell.textLabel.text = [nameArray objectAtIndex:indexPath.row];
    return cell;    
}
person rptwsthi    schedule 07.02.2013
comment
Разве я не могу как-то настроить свой предикат? потому что все работает, кроме моей ячейкиForRowAtIndexPath - person Steaphann; 07.02.2013