How does UILocalizedIndexedCollation work? (sample code from the documentation)

how it works UILocalizedIndexedCollation?

I read the sample code from the documentation, initialized RootViewController, we send it some data ( rootViewController.timeZonesArray = timeZones;), but at this point it is collationalready used in the view controller:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    // The number of sections is the same as the number of titles in the collation.
    return [[collation sectionTitles] count];
}

Basically, this is where the magic seems to be happening, so what does it contain [collation sectionTitles]? something should be automatic, but I don’t see how it all works?

- (void)configureSections {

    // Get the current collation and keep a reference to it.
    self.collation = [UILocalizedIndexedCollation currentCollation];

    NSInteger index, sectionTitlesCount = [[collation sectionTitles] count];

    NSMutableArray *newSectionsArray = [[NSMutableArray alloc] initWithCapacity:sectionTitlesCount];

    // Set up the sections array: elements are mutable arrays that will contain the time zones for that section.
    for (index = 0; index < sectionTitlesCount; index++) {
        NSMutableArray *array = [[NSMutableArray alloc] init];
        [newSectionsArray addObject:array];
        [array release];
    }

    // Segregate the time zones into the appropriate arrays.
    for (TimeZoneWrapper *timeZone in timeZonesArray) {

        // Ask the collation which section number the time zone belongs in, based on its locale name.
        NSInteger sectionNumber = [collation sectionForObject:timeZone collationStringSelector:@selector(localeName)];

        // Get the array for the section.
        NSMutableArray *sectionTimeZones = [newSectionsArray objectAtIndex:sectionNumber];

        //  Add the time zone to the section.
        [sectionTimeZones addObject:timeZone];
    }

    // Now that all the data in place, each section array needs to be sorted.
    for (index = 0; index < sectionTitlesCount; index++) {

        NSMutableArray *timeZonesArrayForSection = [newSectionsArray objectAtIndex:index];

        // If the table view or its contents were editable, you would make a mutable copy here.
        NSArray *sortedTimeZonesArrayForSection = [collation sortedArrayFromArray:timeZonesArrayForSection collationStringSelector:@selector(localeName)];

        // Replace the existing array with the sorted array.
        [newSectionsArray replaceObjectAtIndex:index withObject:sortedTimeZonesArrayForSection];
    }

    self.sectionsArray = newSectionsArray;
    [newSectionsArray release]; 
}

thanks for the help

+3
source share
1 answer

[collation sectionTitles] . , "B" "F", . , , , Apple UILocalizedIndexedCollation, , .

+4

All Articles