Swift Core Data 只保存与循环中最后一个的关系
Swift Core Data only saving relationship to the last in the loop
我有以下数据模型:
Checklist
@NSManaged var date: NSTimeInterval
@NSManaged var day: Int16
@NSManaged var items: NSSet?
和
ChecklistItem
@NSManaged var completed: Bool
@NSManaged var dayType: Int16
@NSManaged var itemName: String?
@NSManaged var timeOfDay: String?
@NSManaged var checklist: Checklist?
我正在尝试将 ChecklistItems 数组 (NSSet) 保存到新的 Checklist 对象中。这是我的代码:
var tasksHolder = [ChecklistItem]()
let moc = CoreDataStack.sharedInstance.managedObjectContext
//puts one day's worth of tasks into the array
for (index, item) in tasks.enumerate() {
let newTask = NSEntityDescription.insertNewObjectForEntityForName(String(ChecklistItem), inManagedObjectContext: moc) as! ChecklistItem
newTask.completed = false
newTask.dayType = DayType.ShakeDay.rawValue
newTask.itemName = item
newTask.timeOfDay = times[index]
do {
try moc.save()
} catch {
print("error")
}
tasksHolder.append(newTask)
}
//do each day
for i in 0..<30 {
let set = NSSet(array: tasksHolder)
let newChecklist = NSEntityDescription.insertNewObjectForEntityForName(String(Checklist), inManagedObjectContext: moc) as! Checklist
newChecklist.date = NSDate().timeIntervalSince1970
newChecklist.day = Int16(i)
newChecklist.items = set
do {
try moc.save()
} catch {
print("error")
}
}
实际的清单对象保存得很好,我遇到问题的是关系。 ChecklistItem 关系仅保存到清单的第 30 个(最后一个)元素。我不确定为什么会这样,但我假设它与我向 Checklist 对象添加内容的方式有关。
非常感谢任何帮助。
我不知道这是否是您所拥有内容的最佳选择,但您可以在嵌套的 for 循环中添加关系,如下所示;
//do each day
for i in 0..<30 {
let newChecklist = NSEntityDescription.insertNewObjectForEntityForName(String(Checklist), inManagedObjectContext: moc) as! Checklist
newChecklist.date = NSDate().timeIntervalSince1970
newChecklist.day = Int16(i)
for i in 0..<taskHolder.count {
let items = newChecklist.mutableSetValueForKey("items")
items.addObject(taskHolder[i])
}
do {
try moc.save()
} catch {
print("error")
}
}
我有以下数据模型:
Checklist
@NSManaged var date: NSTimeInterval
@NSManaged var day: Int16
@NSManaged var items: NSSet?
和
ChecklistItem
@NSManaged var completed: Bool
@NSManaged var dayType: Int16
@NSManaged var itemName: String?
@NSManaged var timeOfDay: String?
@NSManaged var checklist: Checklist?
我正在尝试将 ChecklistItems 数组 (NSSet) 保存到新的 Checklist 对象中。这是我的代码:
var tasksHolder = [ChecklistItem]()
let moc = CoreDataStack.sharedInstance.managedObjectContext
//puts one day's worth of tasks into the array
for (index, item) in tasks.enumerate() {
let newTask = NSEntityDescription.insertNewObjectForEntityForName(String(ChecklistItem), inManagedObjectContext: moc) as! ChecklistItem
newTask.completed = false
newTask.dayType = DayType.ShakeDay.rawValue
newTask.itemName = item
newTask.timeOfDay = times[index]
do {
try moc.save()
} catch {
print("error")
}
tasksHolder.append(newTask)
}
//do each day
for i in 0..<30 {
let set = NSSet(array: tasksHolder)
let newChecklist = NSEntityDescription.insertNewObjectForEntityForName(String(Checklist), inManagedObjectContext: moc) as! Checklist
newChecklist.date = NSDate().timeIntervalSince1970
newChecklist.day = Int16(i)
newChecklist.items = set
do {
try moc.save()
} catch {
print("error")
}
}
实际的清单对象保存得很好,我遇到问题的是关系。 ChecklistItem 关系仅保存到清单的第 30 个(最后一个)元素。我不确定为什么会这样,但我假设它与我向 Checklist 对象添加内容的方式有关。
非常感谢任何帮助。
我不知道这是否是您所拥有内容的最佳选择,但您可以在嵌套的 for 循环中添加关系,如下所示;
//do each day
for i in 0..<30 {
let newChecklist = NSEntityDescription.insertNewObjectForEntityForName(String(Checklist), inManagedObjectContext: moc) as! Checklist
newChecklist.date = NSDate().timeIntervalSince1970
newChecklist.day = Int16(i)
for i in 0..<taskHolder.count {
let items = newChecklist.mutableSetValueForKey("items")
items.addObject(taskHolder[i])
}
do {
try moc.save()
} catch {
print("error")
}
}