iosobjective-cuitableviewuilocalizedcollation

how to sort Chinese character into # in UILocalizedIndexedCollation


i'm wondering on how to sort Chinese character into "#" instead of A-Z.

any comments are greatly appreciated.

-(NSArray *)partitionObjects:(NSArray *)array collationStringSelector:(SEL)selector
{
    self.collation = [UILocalizedIndexedCollation currentCollation];
    NSInteger sectionCount = [[self.collation sectionTitles] count];//section count is take from sectionTitles and not sectionIndexTitles
    NSMutableArray *unsortedSections = [NSMutableArray arrayWithCapacity:sectionCount];
    //create an array to hold the data for each section
    for(int i = 0; i < sectionCount; i++)
    {
        [unsortedSections addObject:[NSMutableArray array]];
    }
    //put each object into a section
    for (id object in array)
    {
        NSInteger index = [self.collation sectionForObject:object collationStringSelector:selector];
        [[unsortedSections objectAtIndex:index] addObject:object];
    }
    NSMutableArray *sections = [NSMutableArray arrayWithCapacity:sectionCount];
    //sort each section
    for (NSMutableArray *section in unsortedSections)
    {
        [sections addObject:[self.collation sortedArrayFromArray:section collationStringSelector:selector]];
    }
    return sections;
}

enter image description here


Solution

  • This is what i ended up doing

    -(NSArray *)partitionObjects:(NSArray *)array collationStringSelector:(SEL)selector
    {
        self.collation = [UILocalizedIndexedCollation currentCollation];
        NSInteger sectionCount = [[self.collation sectionTitles] count];//section count is take from sectionTitles and not sectionIndexTitles
        NSMutableArray *unsortedSections = [NSMutableArray arrayWithCapacity:sectionCount];
    
        //create an array to hold the data for each section
        for(int i = 0; i < sectionCount; i++)
        {
            [unsortedSections addObject:[NSMutableArray array]];
        }
    
        if ([self.catString isEqualToString:ARTISTS])
        {
            //put each object into a section
            for (id object in array)
            {
                if (!object)
                {
                    continue;
                }
                NSInteger index = [self.collation sectionForObject:object collationStringSelector:selector];
                [[unsortedSections objectAtIndex:index] addObject:object];
            }
        }
        else
        {
            NSInteger index;
            for (id object in array)
            {
                Song *songItem = object;
                NSString* charIndex;
    
                if([songItem.songName length]<=2)
                {
                    charIndex = [songItem.songName substringToIndex:1];
                }
                else if([songItem.songName length]<=3)
                {
                    charIndex = [songItem.songName substringToIndex:2];
                }
                else if([songItem.songName length]<=4)
                {
                    charIndex = [songItem.songName substringToIndex:3];
                }
                else if([songItem.songName length]>=5)
                {
                    charIndex = [songItem.songName substringToIndex:4];
                }
                NSRegularExpression *regex = [[NSRegularExpression alloc]
                                               initWithPattern:@"[a-zA-Z]" options:0 error:NULL];
                NSUInteger matches = [regex numberOfMatchesInString:charIndex options:0
                                                              range:NSMakeRange(0, [charIndex length])];
                if (matches >=2)
                {
                    index = [self.collation sectionForObject:object collationStringSelector:selector];
                    [[unsortedSections objectAtIndex:index] addObject:object];
                }
                else
                {
                    index = 26; //add object to last index "#"
                    [[unsortedSections objectAtIndex:index] addObject:object];
                }
                songItem = nil;
            }
        }
        NSMutableArray *sections = [NSMutableArray arrayWithCapacity:sectionCount];
    
        //sort each section
        for (NSMutableArray *section in unsortedSections)
        {
            [sections addObject:[self.collation sortedArrayFromArray:section collationStringSelector:selector]];
        }
        return sections;
    }