GroupBy在SwiftUI中使用@FetchRequest
我有一个快捷的视图,如:GroupBy在SwiftUI中使用@FetchRequest,swift,core-data,swiftui,Swift,Core Data,Swiftui,我有一个快捷的视图,如: @FetchRequest( entity: Message(), sortDescriptors: [NSSortDescriptor(keyPath: \Message.date, ascending: false)] ) var allMessages: FetchedResults< Message.date > var body: some View { NavigationView { List(self
@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"))
}
}
@FetchRequest(
实体:Message(),
sortDescriptors:[NSSortDescriptor(密钥路径:\Message.date,升序:false)]
)var allMessages:FetchedResults
var body:一些观点{
导航视图{
列表(self.allMessages){messagein
文本(message.Text)
}
.navigationBarTitle(文本(“最后消息”))
}
}
我希望FetchRequest只返回每个用户的最后一条消息。我需要用一个小组。有没有办法使用@FetchRequest
?如果没有,你会怎么做?一步一步:
否,它将崩溃,因为NSFetchedResultsController不支持NSDictionaryResultTypes的更改跟踪和获取请求。我不知道您如何使用NSFetchedResultsController,但我认为在这种情况下,您可以不为获取的结果控制器设置缓存名称或委托,在这种情况下,它不会执行任何更改跟踪。不,它将崩溃,因为NSFetchedResultsController不支持NSDictionaryResultTypes的更改跟踪和获取请求。我不知道您是如何使用NSFetchedResultsController的,但我认为在这种情况下,您可能不需要为获取的结果控制器设置缓存名称或委托,在这种情况下,它不会执行任何更改跟踪。您的用户实体是什么样子的?你有建立关系吗?如果是这样,那么您只需获取所有用户并用列表中的最后一条消息填充列表。@Ludovic,您能找到解决方案吗?我找到的大多数解决方案都是使用
Dictionary.init(分组方式:)
手动将其分组。对我来说,这似乎不是最有效的解决方案。您的用户实体是什么样子的?你有建立关系吗?如果是这样,那么您只需获取所有用户并用列表中的最后一条消息填充列表。@Ludovic,您能找到解决方案吗?我找到的大多数解决方案都是使用Dictionary.init(分组方式:)
手动将其分组。对我来说,这似乎不是最有效的解决方案。
class TODOItem: NSManagedObject, Identifiable {
@NSManaged public var name: String?
@NSManaged public var notes: String?
}
extension TODOItem {
static func allTODOItem() -> NSFetchRequest<TODOItem> {
//1º
let fetchRequest = NSFetchRequest<TODOItem>(entityName: "TODOItem")
//2º
//fetchRequest.predicate = NSPredicate(format: "", ...)
//3º
fetchRequest.resultType = .dictionaryResultType
//4º
// To get computed props you can use NSExpression (for example the sum of something)
fetchRequest.propertiesToFetch = ["name", "notes"]
//5º
fetchRequest.propertiesToFetch = ["name"]
//6º
let sort = NSSortDescriptor(key: "name", ascending: false)
fetchRequest.sortDescriptors = [sort]
return fetchRequest
}
}
struct Home : View {
@FetchRequest(fetchRequest: TODOItem.allTODOItem()) var items: FetchedResults<TODOItem>
var body: some View {
Text("Home")
}
}