2013-08-17 66 views
0

所以我有這個對象,直接從核心數據關係。 這個NSSet包含的對象是同一個基礎對象的所有子類(我們稱之爲RVSuperClass,它本身也是NSManagedObject的子類)。NSSet按類重組對象

我的最終目標是在UITableView中重新組合這些對象,其中每種對象(RVSuperClass子類)都將組成一個部分。

儘管RVSuperClass(因此沒有太多對象'種類')的子類不多,但NSSet(數百)中可能有很多對象。因此,在循環中的不是我所追求的。

有沒有辦法做到這一點?我不是很熟悉NSPredicate,但我想這將是最好的方法嗎?有沒有辦法直接在NSFetchedResultsController中輸出結果?

回答

2

>不會有太多的亞型

這將使得人們能夠有超有一個表示該子類的屬性。現在分組取結果控制器的sectionNameKeyPath是一件輕而易舉的事情。

+0

只需添加:託管對象的(子)類/實體名稱不可作爲屬性訪問,因此它不能用於提取請求或排序描述符。因此,在超類中顯式存儲子類是唯一的選擇。 –

+0

感謝Mundi和Martin R.我決定採用另一種解決方案,即使它也不是非常優雅...... –

0

因爲我可以控制RVSuperClass的子類,所以我決定採用相對尷尬的解決方案,但不能很好地進行擴展,但在這種情況下可行。

viewDidLoad,對於RVSuperClass每個子類創建謂詞:

[NSPredicate predicateWithFormat: @"self isKindOfClass: %@", [RVSubclassA class]]; 

使用filteredSetUsingPredicate:並加入在那裏一個NSSortDescriptor,我添加所得NSArray到的ivar NSMutableArray,其中每個NSArray將是一個部的tableview。

太糟糕了如果我決定稍後添加RVSuperClass的子類,我將不得不修改此代碼(並添加另一個NSPredicate)。

+0

鑑於您的評論,即使您沒有實施它,您仍應接受最佳答案。 – Mundi

+0

耐心我的朋友。我現在提出了你的答案,但我會留下一點點時間,在接受任何答案之前提出另一個答案。 –

+0

你是老闆;-) – Mundi