当在NSMutableDictionary中用作键时,Unicode字符会混乱

时间:2011-06-07 07:43:42

标签: objective-c ios4

当我在NSMutableDictionary中使用以下键Ä,Å,Ö时,它们会转换为“\ U00c4”,“\ U00c5”和“\ U00d6”。当我在代码中使用原始形式(Å,Ä和Ö)时,导致我的软件错过与所提到的键相关联的对象。该语言是瑞典语,我希望这适用于所有国家/地区,因此转换不是理想的行为。

我在这里做错了什么?

如何避免转换字符?

代码:

- (void)populateNavigationViewWithProjects:(id)projects
{
    [self.navigationViewItems removeAllObjects];
    BOOL keyExists = NO;
    NSString* firstLetterInProjectName = @"";
    for (id project in projects) {
        firstLetterInProjectName = [[[project valueForKey:@"name"] uppercaseString] substringToIndex:1];
        keyExists = [[self.navigationViewItems allKeys] containsObject:firstLetterInProjectName];
        if (keyExists) {
            [[self.navigationViewItems objectForKey:firstLetterInProjectName] addObject:project];
        }
        else {
            NSMutableArray* listOfProjects = [[NSMutableArray alloc] initWithObjects:project, nil];
            [self.navigationViewItems setValue:listOfProjects forKey:firstLetterInProjectName];
            [listOfProjects release];
        }
    }
    [self.tableView reloadData];
}

navigationViewItems访问:

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    NSString* sectionTitle = [[[UILocalizedIndexedCollation currentCollation] sectionTitles] objectAtIndex:section];
    BOOL sectionContainsData = [[self.navigationViewItems allKeys] containsObject:sectionTitle];
    if (sectionContainsData) {
        return sectionTitle;
    }
    return @"";
}

Å,Ä和Ö下列出的物体不会因此而列出。

1 个答案:

答案 0 :(得分:0)

你可以在使用字符串之前调用-precomposedStringWithCanonicalMapping

NSString处理unicode内容的功能。

precomposedStringWithCanonicalMapping:
decomposedStringWithCanonicalMapping: