我已经观看了Core Data上的一些WWDC视频,并且计划维护一个规范化的文本属性。 比方说,我有以下数据:为核心数据规范化或规范化字符串?
originalString normalizedString (+lowercase?)
Ønsker onsker
onsker onsker
Onsker onsker
当我询问我的模型,我想通过“规格化”进行排序,以便它忽略的情况和O(或其它字符)。我也希望能够运行一个查询,如“开始于'o'”,并让它返回上面的3个单词。
我试图避免做一些事情,如:查询模型
[NSPredicate predicateWithFormat:@"(originalString like[cd] %@)"...
。 我也在尝试为我的排序使用'originalString'。
我试过没有成功两种不同的方法,我的规范化字符串仍然保存为originalString(我重写我创建了一个类的setter):
调用decomposedStringWithCanonicalMapping:
// ... [normalizedString decomposedStringWithCanonicalMapping]; // ...
其次this example:
// ... CFStringNormalize((CFMutableStringRef)normalizedString, kCFStringNormalizationFormD); CFStringFold((CFMutableStringRef)normalizedString, kCFCompareCaseInsensitive | kCFCompareDiacriticInsensitive | kCFCompareWidthInsensitive, NULL);
关于如何完成我的目标的任何想法?
编辑: 这是我重写的二传手,我知道它被称为:
- (void) setNormalizedName:(NSString *)newNormalizedName
{
NSMutableString *normalizedString;
if (![self.lastName length] == 0) {
normalizedString = [NSMutableString stringWithString:self.lastName];
} else {
normalizedString = [NSMutableString stringWithString:self.firstName];
}
// CFStringNormalize((CFMutableStringRef)normalizedString, kCFStringNormalizationFormD);
// CFStringFold((CFMutableStringRef)normalizedString, kCFCompareCaseInsensitive | kCFCompareDiacriticInsensitive | kCFCompareWidthInsensitive, NULL);
[normalizedString decomposedStringWithCanonicalMapping];
[self willChangeValueForKey:@"normalizedName"];
[self setPrimitiveValue:normalizedString forKey:@"normalizedName"];
[self didChangeValueForKey:@"normalizedName"];
}
请出示您的自定义setter方法的代码。我不明白为什么这不应该工作。 –
@MartinR我编辑了我的问题以包含我的setter方法。 – Eric