2015-09-29 40 views
0

我正在構建一個日記應用程序,您可以在其中創建一個FocusArea對象,該對象包含30個日記賬Entry對象。Swift核心數據中的一對多關係

所以我在我的數據模型中創建了一對多的關係。

然後我實現了兩個NSManagedObject類:

@objc(FocusArea) 類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!") 
     } 
    } 
} 

回答

0

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

newEntry.focus = newFocus。

因此,不要設置父級與子級之間的關係,請將它從子級設置爲父級。