我那里有实体ChatMessage
,ChatUser
和ChatRoom
。
class ChatMessage: NSManagedObject {
@NSManaged var id: String // Unique constraint
@NSManaged var message: String
@NSManaged var user: ChatUser
@NSManaged var room: ChatRoom
}
class ChatUser: NSManagedObject {
@NSManaged var id: String // Unique constraint
@NSManaged var name: String
@NSManaged var messages: Set<ChatMessage>
}
class ChatRoom: NSManagedObject {
@NSManaged var id: String // Unique constraint
@NSManaged var name: String
@NSManaged var messages: Set<ChatMessage>
}
我们假设有100个ChatUser
和100个ChatRoom
,每个都包含至少5000个ChatMessage
s。
ChatServer与同步策略一起使用,它可以传递重复的ChatMessage,但它甚至不应丢失单个。因此,iOS客户端应检查重复项。但是幸运的是,Core Data
促进了unique key constraints
的发展,并且无需任何额外的编程工作即可解决重复的问题。
但是保存新的ChatMessage
和Xcode
仪器花费了超过一分钟的时间,这表明isEquals:
中的NSString
方法花费了更多时间。原因是Core Data
在save()期间检查唯一性。
如果我删除了id
唯一约束,那么一切都会很好,但是我需要花费更多的代码来处理重复项。
我这里的错误是什么?还是核心数据问题?我花了几天时间找出问题所在。处理此问题的正确方法是什么?
谢谢!
答案 0 :(得分:0)
由于ChatUser.messages属性是一个集合,并且集合仅包含唯一值,因此您应该可以通过将所有消息添加到用户对象和它们所属的房间对象中并免费删除所有重复项来使用该值