gpt4 book ai didi

ios - 在 Swift 中从 Core Data 设置实体对象

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

我在从实体创建对象时遇到问题。我有两个类 CategoryProduct。这是他们的实现:

class Category: NSManagedObject {
}
extension Category {
@NSManaged var name: String?
@NSManaged var products: NSSet?
}

class Product: NSManagedObject {
}

extension Product {
@NSManaged var name: String?
@NSManaged var price: Double
@NSManaged var producer: String?
@NSManaged var basketConnection: NSSet?
@NSManaged var containedBy: Category?
}

它们之间存在关系,其中Category作为属性之一出现在Product表中。现在我想向该表添加一些数据。添加Category没有问题,但我不知道如何将特定的Category设置为Product。我必须使用 Categories 获取所有表,选择特定对象,并将其设置为 Product 属性,还是有其他方法可以做到这一点?我还没有找到任何解决这个问题的教程,所以我不得不在这里问。这是我编写的一些代码,用于找出解决方案(但它不起作用)。

    let categories = ["One", "Two", "Three"];

for cat in categories{
let newCategory = Category(entity: categoryEntity!, insertIntoManagedObjectContext: ctx)
newCategory.name = cat

let newProduct = Product(entity: productEntity!, insertIntoManagedObjectContext: ctx)
newProduct.name = "Test"
newProduct.price = 10
newProduct.producer = "Testowy"
newProduct.containedBy = newCategory

}

我的第二个问题是,如何为特定的类别名称选择特定的产品数组。这段代码应该工作吗?

request.predicate = NSPredicate(format: "containedBy.name == %@",arguments: [self.categories])

感谢您的帮助!

最佳答案

先保存

在将任何内容写入数据库之前,您需要保存上下文。

do { try context.save() } catch {}

正确的谓词

您的谓词正确启动,但使用了错误的参数。

NSPredicate(format: "containedBy.name = %@", aString)

多个类别的谓词需要一组 Category 对象(大概您必须之前获取)。

NSPredicate(format: "containedBy in %@", categoryArray)

或者如果您的类别具有唯一的名称,这也适用

NSPredicate(format: "containedBy.name in %@", namesArray)

其他建议

我建议使用 productEntity! (这是强制展开并且需要更多代码),而不是使用

let newCategory = NSEntityDescription.insertNewObjectForEntityForName(
"Category", inManagedObjectContext: context)

关于ios - 在 Swift 中从 Core Data 设置实体对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33964679/

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