我已經觀看了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