2015-06-18 75 views
0

所以我有一個核心數據實體,我試圖使用NSFetchedResultsController在表視圖中顯示。有關模型屬性看起來是這樣的:NSFetchedResultsController部分按關係分組

  • parentPost(OTM關係)
  • childPosts(parentPost的倒數)
  • rootParent(OTM關係,指出的頂部樹)
  • allChildren(rootParent的反轉,顯示根對象的扁平化子項)

這些關係形成了一個樹,其中根Post是parentPost = nil的那棵樹。我希望顯示的方式是,每個根帖子是一個部分中的第一個項目,然後其餘的行是扁平化的根子項列表。

這是很容易做這樣的讀取請求手動排列:

 let fetchRequest = NSFetchRequest(entityName: Post.entityName()) 
     fetchRequest.predicate = NSPredicate(format: "parentPost = NULL") 
     fetchRequest.sortDescriptors = sortOrder.sortDescriptors 
     fetchRequest.fetchBatchSize = 20 
     fetchRequest.relationshipKeyPathsForPrefetching = ["allChildren"] 

然後我可以建立從每個結果的部分陣列做這樣的事情:

let sectionPost = self.fetchedResultsController!.fetchedObjects![section] as! Post 
    var sectionArray = NSMutableArray(object: sectionPost) 
    var filteredSet = sectionPost.allChildren.filteredOrderedSetUsingPredicate(NSPredicate(format: "approved != FALSE AND postDeleted != TRUE AND spam != TRUE")) 
    sectionArray.addObjectsFromArray(filteredSet.array) 

問題是:在FRC內部有沒有辦法做到這一點?從FRC中維護一個單獨的數據源非常複雜,我寧願找到一種方法來處理這個請求,但是我沒有看到處理這個問題的好方法。

回答

1

否實體上的密鑰必須發生分組。所以使用瞬態屬性或獲取屬性來獲得關係,並使其成爲一個關鍵字

您的情況。使所有的POST對象有一個關鍵'postToGroupBy'或'postNameToGroupBy或其他任何這樣的帖子和所有的孩子在同一組

+0

如何添加一個fetched屬性解決這個問題?區分FRC結果的唯一方法是sectionNameKeyPath屬性,而且我不能想象你所說的將如何工作。你能提供一個例子嗎? – smyrgl

+0

順便說一句,我使用Mogenerator生成類文件,所以關係已經是Post對象的關鍵。但我仍然沒有看到如何使它們成爲使用這些屬性的部分。 – smyrgl

+0

編輯了答案... –

相關問題