2

我想從核心數據模型中獲取已排序的本地化數據。我的代碼:本地化排序的iPhone提取請求

NSEntityDescription *entityDescription = [NSEntityDescription entityForName: entityDescriptionValue 
                inManagedObjectContext: context]; 

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
[fetchRequest setEntity: entityDescription]; 

[fetchRequest setPredicate: predicate]; 

NSSortDescriptor *sortBy = [[NSSortDescriptor alloc] initWithKey: @"name" ascending: YES selector: @selector(localizedCompare:)]; 
[fetchRequest setSortDescriptors: [NSArray arrayWithObject: sortBy]]; 
[sortBy release]; 

但是,當我得到的對象,他們仍然排序與原始值(非本地化的數據)。

我在做什麼不對?

+0

你可以舉兩個'name'值不能比較/排序的例子嗎? –

+0

在所有情況下,您確定數據的排序是基於區域設置嗎?它可能正確排序。 – TechZen

+0

例如,國名:「英國,法國,德國」。當我將語言設置爲葡萄牙語時,我得到的順序是:「Inglaterra,França,Alemanha」。就像我沒有使用localizedCompare:選擇器來排序數據一樣。 –

回答

1

如何從CoreData實體獲取本地化的names?這不是localizedCompare:神奇地檢索字符串的本地化版本並比較它們。相反,它將本地化​​的排序順序用於相同的字符串。 包含@"England"@"France"@"Germany"的數組的排序版本在任何國家都是相同的......它們不包含任何重音字符或任何其他字符。 localizedCompare:的結果只能在兩種語言在字母間使用不同的排序順序時纔會改變。

如果您想根據CoreData實體的屬性從Localizable.strings中檢索某些內容,則需要手動執行該操作。 CoreData的Sqlite後端將無法處理獲取請求級別的數據。因此,您需要首先獲取NSArray中的條目,然後需要使用sortedArrayUsing...:通過傳遞一個方法來檢索NSLocalizedString中的本地化名稱並對它們進行比較。

+0

嗯,謝謝。我已經這樣做了,但我認爲Core Data會以某種方式爲我做到這一點。 無論如何,問題解決了,謝謝。 –