【问题标题】:One-to-Many Relationship in Swift Core DataSwift Core Data 中的一对多关系
【发布时间】:2015-12-27 09:43:39
【问题描述】:

我正在构建一个日记应用程序,您可以在其中创建一个 FocusArea 对象,然后该对象包含 30 个日记条目对象。

所以我在我的数据模型中创建了一对多的关系。

然后我实现了两个 NSManagedObject 类:

@objc(焦点区域) 类 FocusArea: NSManagedObject {

@NSManaged var focusName: String
@NSManaged var focusStart: NSDate
@NSManaged var focusEnd: NSDate
@NSManaged var completeFlag: Bool
//@NSManaged var entries: NSSet

var entries: NSMutableOrderedSet {
    return self.mutableOrderedSetValueForKey("entries")
}  

}

@objc(条目) 类条目:NSManagedObject {

 @NSManaged var entryJournal: String
 @NSManaged var entryDate: NSDate
 @NSManaged var completeFlag: Bool
 @NSManaged var entryStatus: Bool
 @NSManaged var focus: FocusArea

}

我可以毫无问题地添加一个 FocusArea,但是当我尝试创建 30 个 Entry 对象并存储在 FocusArea.entries 中时,一切都在崩溃。

将多个 Entry 对象添加到 FocusArea 对象的正确方法是什么?

我离这儿很远吗?

@IBAction func saveFocusArea(sender: AnyObject) {

    if txtFocusName.text != nil {

        let appDel: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
        let context: NSManagedObjectContext = appDel.managedObjectContext!

        //create new focus area
        let entFocus = NSEntityDescription.entityForName("FocusArea", inManagedObjectContext: context)
        let newFocus = FocusArea(entity:entFocus!, insertIntoManagedObjectContext: context)

        newFocus.focusName = txtFocusName.text!
        newFocus.focusStart = NSDate()
        newFocus.focusEnd = NSDate().dateByAddingTimeInterval(60*60*24*30)
        newFocus.completeFlag = false

        //initialize 30 new entries into core data
        let entEntry = NSEntityDescription.entityForName("Entry", inManagedObjectContext: context)

        for var i = 0; i < 30; i++ {

            let newEntry = Entry(entity:entEntry!, insertIntoManagedObjectContext: context)

            let c = Double(i)
            newEntry.entryDate = NSDate().dateByAddingTimeInterval(60*60*24*c)
            newEntry.entryJournal = ""
            newEntry.entryStatus = false
            newEntry.completeFlag = false

            //THIS IS THE PROBLEM AREA
            newFocus.entries.append(newEntry)
        }
        do {
            try context.save()
        } catch {
            print("There's a problem!")
        }
    }
} 

【问题讨论】:

    标签: swift core-data nsset


    【解决方案1】:

    我想通了。我所要做的就是:

    newEntry.focus = 新焦点。

    因此,与其设置父级到子级的关系,不如设置从子级到父级的关系。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多