gpt4 book ai didi

ios - Set 不适用于 NSManagedObject?

转载 作者:行者123 更新时间:2023-11-30 13:41:18 25 4
gpt4 key购买 nike

我最近在我的程序中发现它,即使我使用了Set,重复也没有停止。该对象称为类别,有两个变量。

import Foundation
import CoreData

extension Category {
@NSManaged var name: String?
@NSManaged var items: NSSet?
}
class Category: NSManagedObject {
override var hashValue: Int {
return name!.hashValue
}
}
func == (left: Category, right: Category) -> Bool {
return left.name == right.name
}

我已经重写了类中的 hashValue: Int 和 == 方法,但 Set 仍然将它们视为两个对象。这是否意味着 Set 不适用于 NSManagedObjects 或者我还有一些事情需要完成?

这是我的单元测试代码:

    guard let cate1 = NSEntityDescription.insertNewObjectForEntityForName("Category", inManagedObjectContext: context) as? MyProgram.Category else { return }
cate1.name = "Cate"
cate1.items = nil
guard let cate2 = NSEntityDescription.insertNewObjectForEntityForName("Category", inManagedObjectContext: context) as? MyProgram.Category else { return }
cate2.name = "Cate"
cate2.items = nil
let combine = Set<MyProgram.Category>([cate1, cate2])
assert(cate1.hashValue == cate2.hashValue)
assert(combine.count == 1)

它将在最后一行代码处失败。有哪位知道原因的可以给我一些建议吗?

最佳答案

不幸的是,核心数据无法实现您想要做的事情管理对象。

因此,你无法定义自己的“平等”概念对于 Core Data 托管对象,其方式与 SetNSSet

检查集合是否已包含具有给定值的托管对象属性你可以做类似的事情

if (combine.contains { $0.name == cate2.name }) {

}

为了避免具有相同名称的 Category 对象,您需要执行一个获取请求,检查一个对象是否具有给定的名称已存在。

关于ios - Set 不适用于 NSManagedObject?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35542175/

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