2011-04-04 61 views
6

我是Core Data的新手,並且在概念上與其中的一些問題掙扎(相對於我所瞭解的SQL)。如何在覈心數據中表示本地化的字符串類型?

我試圖建立一個模型,爲簡單起見樣子:

"Category" entity, which has a name, and a relationship to-many Products 
"Product" entity, which has a name 

我希望這些name S(串)兩個實體來存儲局部變量。這意味着另一次加入。有少量可能的本地化。我知道我可以把每個本地化作爲一個單獨的屬性(「name_en」,「name_de」等),但是這並不能擴展,我想理解完成這個的「正確」方式。

我的直覺告訴我,我想在這裏再添加兩個實體,一個Localizations(它只包含一組可能的本地化)和一個LocalizedString(與Localization相關)。但Xcode警告我沒有建立逆關係等。

有人可以深入研究Core Data模型設計,請幫助一位新手瞭解如何解決這個問題?

(我的下一個問題將建設古怪多擺動的用戶界面,讓您的每一個的可用本地化設置的名稱,但是這將是另一組的調查。:))

+0

這些字符串是由用戶輸入還是僅由應用程序使用?如果您使用Core Data作爲本地化您的應用程序的後端,那麼您最好使用提供的本地化工具。否則,我會傾向於同意fluchtpunkt的回答。 – sosborn 2011-04-04 07:23:31

+0

@sosborn:由用戶輸入。否則我肯定會同意你在這種情況下的建議。 (這也是一個很好的學習例子,因爲實體關係比我經歷過的CD教程更有趣。)謝謝。 – 2011-04-04 14:21:53

回答

14

我不知道如果我有資格作爲人誰groks核心數據,但我用這樣的事情在過去的: enter image description here

nameSomething的英文名稱。因此,我不必搜索英語設備中的關係(其中涵蓋了我應用程序的70%的設備)。
Something子類中有一個名爲localizedName的getter,它返回當前使用的語言代碼的名稱或字符串。

當我這樣做時,我認爲我可以在名稱屬性中保存本地化的字符串,因爲在開發人員不使用的設備上,語言通常不會經常更改。但最後我決定不這樣做,因爲這不是一個性能問題。

另一個變種,我想我可以用它來對不存在的性能問題打: enter image description here

currentLanguageString主要指當前語言的本地化字符串。每當語言發生變化時它都會發生變化(在應用程序第一次啓動時,這種情況只發生過一次,其中99.9%會發生這種情況)。


,如果你有在Something實體不止一個字符串我會做LocalizedString一個抽象父類專門爲你要本地化的字符串創建子類。
你必須使用這種奇怪的結構,因爲你不能創建一個關係到多個實體。


或者,如果你知道自己在做什麼,忽視了「不反比關係」警告

enter image description here

,但如果你走這條路,你必須確保您永遠不會刪除仍在使用中的LocalizedString對象。您不想以不一致的存儲結束。

+0

非常感謝您的詳細回覆。好東西。這是你最後最感興趣的一點。在SQL中,LocalizedString表可能是一個像(stringID,languageCode,text)這樣的元組,但正如你所說,這種類型的非逆通用存儲在這裏並不自然。我會用你描述的方式來思考它。謝謝。 – 2011-04-04 14:25:19

+2

這可以使你的數據庫巨大,如果你有很多字符串。搜索也相當困難/緩慢,但否則它的工作 – 2013-01-24 14:19:01

+0

很好的解釋。謝謝! – 2015-01-12 10:28:14

相關問題