epa*_*tel 13 iphone core-data special-characters uitableview
我添加了一个简单的Core Data iPhone应用程序的部分列表.
我按照这个问题来创建它 - 如何使用第一个字符作为节名,但我的列表中还包含以AZ以外的字符开头的项目,特别是在瑞典使用的Å,Ä和Ö.
现在的问题是,当表视图显示部分列表时,最后三个字符被绘制错误.见下图
看来我现在最好的选择是让这些物品在"Z"下排序
if ([letter isEqual:@"Å"] ||
[letter isEqual:@"Ä"] ||
[letter isEqual:@"Ö"])
letter = @"Z";
Run Code Online (Sandbox Code Playgroud)
有人想过这个吗?
当我在它的时候......'Å','Ä'和'Ö'应按顺序排序,但由Core Data分类为'Ä','Å'和'Ö' NSSortDescriptor.我试图将选择器设置为localizedCaseInsensitiveCompare:但是会out of order section name 'Ä. Objects must be sorted by section name'出错.看到了吗?
Ste*_*ntz 15
所以我不能放弃这个,发现以下内容:
在这种情况下,您需要做的是"Unicode规范化表格D".在http://unicode.org/reports/tr15/中更详细解释(警告,长而干的文件)
这是一个执行分解然后过滤掉所有变音符号的函数.您可以使用它将Äpple转换为Apple,然后使用第一个字母构建索引.
- (NSString*) decomposeAndFilterString: (NSString*) string
{
NSMutableString *decomposedString = [[string decomposedStringWithCanonicalMapping] mutableCopy];
NSCharacterSet *nonBaseSet = [NSCharacterSet nonBaseCharacterSet];
NSRange range = NSMakeRange([decomposedString length], 0);
while (range.location > 0) {
range = [decomposedString rangeOfCharacterFromSet:nonBaseSet
options:NSBackwardsSearch range:NSMakeRange(0, range.location)];
if (range.length == 0) {
break;
}
[decomposedString deleteCharactersInRange:range];
}
return [decomposedString autorelease];
}
Run Code Online (Sandbox Code Playgroud)
(我在邮件列表上找到了这个代码,忘记了源代码,但是我把它拿了来修好了一点)
当我遇到这样的情况时,我首先问自己的是“苹果做了什么”。
\n\n作为一个实验,我刚刚将“Joe \xc3\x84pple”添加到我的 iPhone 地址簿中,他出现在普通的 A 下方。我认为这很有意义。
\n\n因此,您应该这样做,而不是将它们扔到 Z 或 \xc3\x84 下。必须有某种方法来获取用于分组的 unicode 字符的“基本”字母。
\n| 归档时间: |
|
| 查看次数: |
6696 次 |
| 最近记录: |