ios - Swift Core Data 只保存与循环中最后一个的关系

标签 ios swift core-data xcode7 relationships

我有以下数据模型:

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")
        }
    }

实际的 Checklist 对象保存得很好,这是我遇到问题的关系。 ChecklistItem 关系仅保存到 list 的第 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")
    }
}

关于ios - Swift Core Data 只保存与循环中最后一个的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36207806/

相关文章:

ios - 没有导航 Controller 的 UIViewController 之间的转换

Swift 中 dispatch_get_specific 的 Linux 编译错误

ios - 核心数据在我删除它并重新启动我的应用程序后仍然存在

ios - 带有标签的 ImageView 对于不同大小的图像具有动态位置

ios - 以编程方式控制辅助 View 的高度到解析 TableView 中

ios - CoreData MagicalRecord 保存方法在 iPhone5 上崩溃

swift - 在上下文之外创建 NSManagedObject

ios - ios6中的Twitter Social framework方法完成

ios - 在 MVVM 模式下将数据传递给 UIViewController

android - 适用于 iOS 和 Android 的 HTML 格式的电话链接