2

我在覈心數據 中使用屬性eventName,eventDate,eventLocation.I使用SortDescriptors進行關鍵eventDate.I在這裏有一個問題,我需要設置我需要排序的位置首選項基於位置不是一個關鍵,但價值..對於前 - 假設我有位置設置爲「西雅圖」比位置西雅圖應顯示的所有事件。你有任何想法如何做到與FetchControllers ..請閱讀回答FetchControllers中的自定義排序描述符

前的問題,我想DONOT

[NSSortDescriptor sortDescriptorWithKey:@"eventLocation" ascending:YES]; 

但一些像

[NSSortDescriptor sortDescriptorWithKey:@"eventLocation==Seattle" ascending:YES]; 

(這是不對的,我知道這是謂語形式)

+0

所有事件是數組還是字典數組? – 2013-07-15 10:16:28

+0

@RanjuPatel沒有不在數組m使用fetch控制器的表視圖,我希望委託方法的工作以及..Db不是靜態的 – sheetal

+0

http://stackoverflow.com/questions/1071765/how-to-sort-core- data-fetched-properties – 2013-07-15 10:22:59

回答

1

@sheetal,你的情況是類似iPhone的手機應用程序,其中聯繫人顯示按姓氏升序,然而#必須出現在最後(Z以下)。換句話說,我們首先需要A B ... Z,然後是#。 #

順便說一下,#代表那些以其他字符開頭的Last Names,例如@myHome,133isACat,#puppy等。爲了得到部分,我們可以創建一個名爲lastNameInitial的新Transient屬性,並將其作爲SectionNameKeyPath 。如果isLastNameNumeric(定義如下)爲YES,則指定lastNameInitial = @「#」。否則,將Last Name的第一個字母,如A,B等分配給lastNameInitial。

如果我們在排序描述符數組中使用單個排序描述符,即基於Last Name Ascending的排序描述符,那麼我們最終將在#之前使用#first。爲了解決這個問題,我們可以定義一個名爲isLastNameNumeric (BOOL),對於「常規」姓氏(以AB ... Z開頭)爲0,對於@myHome等其他所有人爲1。根據isLastNameNumeric Ascending生成一個單獨的排序描述符,並將其作爲數組中的第一個排序描述符。使姓氏升序排序描述符成爲第二個排序描述符,它將根據姓氏進行子排序。

重申,基於isLastNameNumeric Ascending的排序描述符僅用作隱形助手。

一個類似的解決方案將爲你工作。但是,如果您的eventLocation可以更改(並不總是西雅圖),那麼實施此解決方案可能會更棘手。

如果任何人有更好的主意,無論是首先顯示A B ... Z還是然後#,或者針對@ sheetal的情況,我都是耳朵。

+0

任何代碼示例? –

+0

我設法按照@J Sreedhar的建議實現Phone.app風格索引。所有的工作都很好,除了他忘了提及如果你使用SQLite存儲,你不能在瞬態屬性上添加排序描述符。爲此,我創建了正常的布爾屬性,並將其設置爲一個臨時布爾屬性,並設置了另一個屬性。稍後將發佈代碼示例,因爲它仍在開發中。 – valdyr