【发布时间】:2020-12-09 14:37:06
【问题描述】:
在我的项目中,我创建了两个实体:Container 和 Items。两者之间是一对多的关系。在Container 中,我调用了关系项并将其设置为“To Many”,因为我希望每个容器中有很多项。在Items 中,我调用了关系容器并将其设置为“To One”,因为每个项目都必须与一个且只有一个容器相关联。
除此之外,在我的项目中,我有一个表格视图,我可以在其中添加新容器,当我按下一个单元格时,我可以看到它的项目。创建容器的代码很好。当我尝试创建项目时出现问题:它们已成功创建但它们出现在每个容器中。
在下面的部分中,我将发布对象,如何保存容器以及如何保存项目:
- 对象:
extension Container {
@nonobjc public class func fetchRequest() -> NSFetchRequest<Container> {
return NSFetchRequest<Container>(entityName: "Container")
}
@NSManaged public var name: String?
@NSManaged public var index: Int64
@NSManaged public var items: NSSet?
}
extension Items {
@nonobjc public class func fetchRequest() -> NSFetchRequest<Items> {
return NSFetchRequest<Items>(entityName: "Items")
}
@NSManaged public var text: String?
@NSManaged public var image: UIImage?
@NSManaged public var index: Int64
@NSManaged public var container: Container?
}
- 创建容器:
let containerEntity = NSEntityDescription.entity(forEntityName: "Container", in: managedContext)!
let items: NSSet = []
let container = NSManagedObject(entity: containerEntity, insertInto: managedContext) as! Container
///Count is just an int variable
container.setValue("Name", forKeyPath: "name")
container.setValue(count, forKeyPath: "index")
container.setValue(items, forKey: "items")
do {
try managedContext.save()
} catch let error as NSError {
print("Could not save. \(error), \(error.userInfo)")
}
- 创建项目:
let itemEntity = NSEntityDescription.entity(forEntityName: "Items", in: managedContext)!
let items = NSManagedObject(entity: itemEntity, insertInto: managedContext) as! Items
items.setValue("item", forKeyPath: "text")
items.setValue(count, forKeyPath: "index")
do {
try managedContext.save()
} catch let error as NSError {
print("Could not save. \(error), \(error.userInfo)")
}
无论如何,我认为我应该编辑容器实体,而不是创建项目实体,然后将其添加到项目中。为此,我尝试了这个,但我觉得我错过了一些东西,因为这个东西崩溃了。
let fetchRequest:NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "container")
do {
let test = try managedContext.fetch(fetchRequest)
let objectUpdate = test[containerIndex] as! NSManagedObject
objectUpdate.setValue("item", forKey: "text")
objectUpdate.setValue(count, forKey: "index")
do{
try managedContext.save()
} catch {
print(error)
}
}
catch {
print(error)
}
那么如何将项目添加到特定容器中?
另外,如果我的两个实体属性被称为索引可以吗?
【问题讨论】: