GroupBy 在 SwiftUI 中使用 @FetchRequest

Lud*_*vic 5 core-data swift swiftui

我有一个 SwiftUI 视图,如下所示:

@FetchRequest(
    entity: Message(),
    sortDescriptors: [NSSortDescriptor(keyPath: \Message.date, ascending: false)]
) var allMessages: FetchedResults< Message.date >

var body: some View {
    NavigationView {
        List(self.allMessages) { message in
            Text(message.text)
        }
        .navigationBarTitle(Text("Last Messages"))
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望 FetchRequest 仅返回每个用户的最后一条消息。我需要使用分组依据。有办法使用吗@FetchRequest?如果没有,你会怎么做?

Saú*_*ril -1

一步步:

\n\n
    \n
  1. 创建 NSFetchRequest
  2. \n
  3. 根据您选择的条件指定要过滤\n的 NSPredicate
  4. \n
  5. 将 resultType 设置为“.DictionaryResultType”(“Group By”必需)
  6. \n
  7. 设置要包含在提取中的属性。
  8. \n
  9. 设置分组依据的属性
  10. \n
  11. 创建一个 NSSortDescriptor 以按名称降序排序
  12. \n
  13. 最后,您可以使用初始值设定项“@FetchRequest(fetchRequest:”) 创建@FetchRequest
  14. \n
\n\n
class TODOItem: NSManagedObject, Identifiable {\n    @NSManaged public var name: String?\n    @NSManaged public var notes: String?\n}\n\nextension TODOItem {\n    static func allTODOItem() -> NSFetchRequest<TODOItem> {\n        //1\xc2\xba\n        let fetchRequest = NSFetchRequest<TODOItem>(entityName: "TODOItem")\n        //2\xc2\xba\n        //fetchRequest.predicate = NSPredicate(format: "", ...)\n        //3\xc2\xba\n        fetchRequest.resultType = .dictionaryResultType\n        //4\xc2\xba\n        // To get computed props you can use NSExpression (for example the sum of something)\n        fetchRequest.propertiesToFetch = ["name", "notes"]\n        //5\xc2\xba\n        fetchRequest.propertiesToFetch = ["name"]\n        //6\xc2\xba\n        let sort = NSSortDescriptor(key: "name", ascending: false)\n        fetchRequest.sortDescriptors = [sort]\n\n        return fetchRequest\n    }\n}\n\nstruct Home : View {\n    @FetchRequest(fetchRequest: TODOItem.allTODOItem()) var items: FetchedResults<TODOItem>\n\n    var body: some View {\n        Text("Home")\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

  • 不,它会崩溃,因为 NSFetchedResultsController 不支持使用 NSDictionaryResultType 进行更改跟踪和获取请求 (3认同)