0", IOSUser.sh-6ren">
gpt4 book ai didi

ios - NSPredicate 收集 NSManagedObject 请求失败

转载 作者:行者123 更新时间:2023-11-29 12:00:42 25 4
gpt4 key购买 nike

我尝试执行以下操作:

    predicate = NSPredicate(format: "user.userID = %@ AND messages[SIZE] > 0", IOSUser.sharedInstance().userID)
let managedObjectCtx = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
let entity = NSEntityDescription.entityForName("Session", inManagedObjectContext: managedObjectCtx)
fetchRequest.entity = entity
fetchRequest.predicate = predicate
let dateSortDescriptor = NSSortDescriptor(key: "messages[LAST].date", ascending: false)
let sortDescriptors = [dateSortDescriptor]
fetchRequest.sortDescriptors = sortDescriptors
sessionFetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: managedObjectCtx, sectionNameKeyPath: nil, cacheName: nil)
sessionFetchedResultsController.delegate = self

do{
try sessionFetchedResultsController.performFetch()
}catch{
abort()
}

但是它在 performFetch() 上崩溃了。

基本上,我尝试获取应用程序用户拥有的所有聊天 session ,并且我尝试确保所有 session 至少有 1 条消息。另外,我想按最近的消息对所有 session 进行排序。

这是崩溃:

enter image description here

最佳答案

我认为您无法获得获取的结果 Controller 来实现您想要的。可以使谓词起作用:

predicate = NSPredicate(format: "user.userID = %@ AND messages.@count > 0", IOSUser.sharedInstance().userID)

但是排序描述符是一个失败的原因:CoreData 只能对(持久的)属性进行排序。一种解决方案是向 Session 实体添加持久属性(例如 lastMessageDate)。显然,无论何时向 session 添加消息/从 session 删除消息,您都需要更新此属性。

如果您可以接受简单的获取,则可以使用谓词获取 Message 对象:

predicate = NSPredicate(format: "session.user.userID = %@", IOSUser.sharedInstance().userID)

和排序描述符:

let dateSortDescriptor = NSSortDescriptor(key: "date", ascending: false)

然后使用

提取一组不同的 Session对象
let sessionsArray = fetchResults.valueForKeyPath("@distinctUnionOfObjects.session")

(您可能需要将 fetchResults 转换为 NSArray)。

关于ios - NSPredicate 收集 NSManagedObject 请求失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37134398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com