gpt4 book ai didi

ios - 从多对多关系核心数据iOS中获取单个实体

转载 作者:行者123 更新时间:2023-11-29 12:02:38 24 4
gpt4 key购买 nike

我有这样的数据模型:

Conversation<---->>Message

我已将上述两个实体的类创建为:

Conversation {
@NSManaged var messages: NSSet?
}

我有 Conversation 对象,我正在使用 NSFetchedResultsController 获取所有对话并将它们显示在屏幕上。

如果我想从该对话中获取特定消息,那么哪种方式会更好:

(我在Conversation中有获取特定消息的方法,下面是方法的内容)

1 个获取请求

func getParticularMessage(uid: String) -> Message {
let pred = NSPredicate(format: "conversation == %@ AND uid == %@", self, uid)
let entity = NSEntityDescription.entityForName("Message", inManagedObjectContext: moc)
let fetchRequest = NSFetchRequest()
fetchRequest.entity = entity!
fetchRequest.predicate = pred

do{
let results = try moc.executeFetchRequest(fetchRequest)
return results.first as! Message
} catch {
let resultError = error as NSError
DDLogError(resultError.localizedDescription)
}

}

2 遍历 NSSet

func getParticularMessage(uid: String) -> Message {
for msg in messages {
let singleMsg = msg as! Message
if singleMsg.uid == uid {
//this is the message which we want
return singleMsg
}
}
}

更新

假设此 getParticularMessage 方法在应用程序运行时被非常频繁地调用(每分钟 10 次)。

这个频率是因为应用程序是聊天应用程序,当我们发送任何消息并获取传递状态时,它会调用读取状态。

由于用户可以在一分钟内频繁发送消息,因此该方法会被频繁调用。

最佳答案

您的代码是危险的,因为您不知道您会找到要返回的结果,如果您不这样做,您将返回 nil 和/或尝试解包它。

在某些方面,效率取决于数据库的大小、对话中有多少消息以及其中有多少已加载到内存中。

通常获取会更好,您的其他选项需要将所有对象加载到内存中。如果你知道它们已经加载到内存中(没有错误),那么循环应该更快......

最后,您现在不应该关心。如果您观察到问题,则应根据对一般使用条件和极端情况的分析进行测试以找出问题所在。

关于ios - 从多对多关系核心数据iOS中获取单个实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36316077/

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