一对多关系 CoreData Swift



Core Data在大多数情况下都很好用。当我单击第一个 VC(项目)的名称并执行第二个 VC(成本)的 Seque 时,我可以看到成本名称和其他数据。但是当我在第一个 VC 中添加第二个名字时,我可以看到与名字相同的数据。

我试图建立一对多的关系。

我有 2 个数据模型:

import Foundation
import CoreData
@objc(Items)
class Items: NSManagedObject {
   @NSManaged var count: NSNumber
   @NSManaged var name: String
   @NSManaged var cost: NSSet
}
import Foundation
import CoreData
@objc(Costs)
class Costs: NSManagedObject {
  @NSManaged var costsDate: NSDate
  @NSManaged var costsName: String
  @NSManaged var costsValue: NSNumber
  @NSManaged var account: Items
}

以下是addAccount 的(第一个 VC 的名称)保存操作:

@IBAction func saveButtonPressed(sender: UIBarButtonItem) {
    let appDelegate = (UIApplication.sharedApplication().delegate as AppDelegate)
    var managedObjectContext = appDelegate.managedObjectContext
    let entityDescription = NSEntityDescription.entityForName("Items", inManagedObjectContext: managedObjectContext!)
    let account = Items(entity: entityDescription!, insertIntoManagedObjectContext: managedObjectContext!)
    account.name = cellOneNameTextField.text
    if cellTwoCountTextField.text.isEmpty {
    } else {
    account.count = (cellTwoCountTextField.text).toInt()!
    }
    // Saving data
    appDelegate.saveContext()
    var request = NSFetchRequest(entityName: "Items")
    var error:NSError? = nil
    var results:NSArray = managedObjectContext!.executeFetchRequest(request, error: &error)!
    self.navigationController?.popViewControllerAnimated(true)
}

以下是addCost 的保存操作:

    @IBAction func saveButtonTapped(sender: UIBarButtonItem) {
    // CoreData Access
    let appDelegate = (UIApplication.sharedApplication().delegate as AppDelegate)
    var managedObjectContext = appDelegate.managedObjectContext
    let entityDescription = NSEntityDescription.entityForName("Costs", inManagedObjectContext: managedObjectContext!)
    let cost = Costs(entity: entityDescription!, insertIntoManagedObjectContext: managedObjectContext!)
    cost.costsName = cellThreeNoteTextField.text
    cost.costsValue = (cellOnePriceTextField.text).toInt()!
    cost.costsDate = datePicker.date
    // Saving data
    appDelegate.saveContext()
    var request = NSFetchRequest(entityName: "Costs")
    var error:NSError? = nil
    var results:NSArray = managedObjectContext!.executeFetchRequest(request, error: &error)!
    for res in results {
        println(res)
    }
    delegate?.refreshTable()
    self.navigationController?.popViewControllerAnimated(true)
}
我不知道

您是否在某处这样做,但是您的Items应该使用Items中的cost变量将Count对象附加到自身。像这样:

let account = Items(...)     
let cost = Cost(...)   
account.cost.addObject(cost)//and changing your var cost:NSSet into var cost:NSMutableSet
//then save Items

(我没有尝试过addObject,但你明白原理)

最新更新