关于核心数据保存对象的主要实体与次要实体

时间:2015-08-09 10:03:04

标签: swift core-data

我正在研究一个核心数据应用程序,目前我已正确设置方法以保存主对象保存用户套牌的名称,但即使用于保存的方法,它也不会保存调用次要对象两者都是一样的。主要确实保存第二,我想知道对象保存的顺序是否重要。我知道这是一个关系,但我认为如果在初级之前调用辅助节点并不重要。我仍然是核心数据的新手,所以只需一个简单的答案即可。如果我需要首先保存主要实体对象,那么我将以这样的方式构建应用程序,否则我可能需要重新查看代码以找出它为什么不能回忆。

这是在以关系方式保存名称之前应该保存的代码:

@IBAction func buttonWarrior(sender: AnyObject) {

    let entity =  NSEntityDescription.entityForName("ClassSelection", inManagedObjectContext: classMOC!)

    let newObject = ClassSelection(entity: entity!,insertIntoManagedObjectContext: classMOC)

    newObject.classname = "Warrior"

    var error: NSError?

    classMOC?.save(&error)

    if let err = error {

        println(err)

    } else {

    self.performSegueWithIdentifier("popOver", sender: self)

    }
}

这是用于存储主对象的代码,该对象是与另一个不同的viewcontroller.swift文件。这在辅助对象上显示为弹出框。这部分工作正常,并且正确回忆:

@IBAction func enterButton(sender: AnyObject) {

    let entityDescription = NSEntityDescription.entityForName("Deck",inManagedObjectContext: managedObjectContext!)

    let storeDeck = Deck(entity: entityDescription!,insertIntoManagedObjectContext: managedObjectContext)

    storeDeck.deckname = usersDeckName.text

    var error: NSError?

    managedObjectContext?.save(&error)

    if let err = error {

        status.text = err.localizedFailureReason


    } else {

        usersDeckName.text = ""
        status.text = "Deck Saved"
        self.performSegueWithIdentifier("showCardSelection", sender: self)

    }

}

我尝试使用的召回方法在当前的迭代中可能没有意义,因为我尝试了许多不同的方法:

@IBOutlet weak var decksListed: UITableView!

let managedObjectContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext

var savedDecksClass = [ClassSelection]()

var frc: NSFetchedResultsController = NSFetchedResultsController()

var frcClasses: NSFetchedResultsController = NSFetchedResultsController()

func getFetchedResultsController() -> NSFetchedResultsController {
    frc = NSFetchedResultsController(fetchRequest: listFetchRequest(), managedObjectContext: managedObjectContext!, sectionNameKeyPath: nil, cacheName: nil)

return frc

}

func getClassesFetchedResultsController() -> NSFetchedResultsController {

    frcClasses = NSFetchedResultsController(fetchRequest: classFetchRequest(), managedObjectContext: managedObjectContext!, sectionNameKeyPath: nil, cacheName: nil)

return frcClasses

}

func listFetchRequest() -> NSFetchRequest {

    let fetchRequest = NSFetchRequest(entityName: "Deck")
    let sortDescriptor = NSSortDescriptor(key: "deckname", ascending: true)
    fetchRequest.sortDescriptors = [sortDescriptor]

    return fetchRequest

}
func classFetchRequest() -> NSFetchRequest {

    let fetchRequestClasses = NSFetchRequest(entityName: "Deck")
    let classSortDescriptor = NSSortDescriptor(key: "classname", ascending: true)
    fetchRequestClasses.sortDescriptors = [classSortDescriptor]

    return fetchRequestClasses
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    let numberofRowsInSection = frc.sections?[section].numberOfObjects

    return numberofRowsInSection!

}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCellWithIdentifier("usersDeck", forIndexPath: indexPath) as! UITableViewCell

    let listed = frc.objectAtIndexPath(indexPath) as! Deck
    cell.textLabel?.text = listed.deckname
    let listedClass = frcClasses.objectAtIndexPath(indexPath) as! ClassSelection
    cell.detailTextLabel!.text = listedClass.classname
    return cell

}

func controllerDidChangeContent(controller: NSFetchedResultsController) {

    decksListed.reloadData()

}


override func viewDidLoad() {
    super.viewDidLoad()

    frcClasses = getClassesFetchedResultsController()
    frcClasses.delegate = self
    frc.performFetch(nil)
    frc = getFetchedResultsController()
    frc.delegate = self
    frc.performFetch(nil)

}

我希望这足以让你有个主意。我检查了关系,它们在模型中似乎都是正确的。我为一些代码看起来的方式道歉,我计划在完成所有编辑工作后缩小它。

1 个答案:

答案 0 :(得分:0)

感谢pbasdf帮助我解决这个问题。他打开的聊天实际上包含了需要完成的工作。我只是没有保存关系并将对象从一个视图控制器传递到下一个。在通过一个例子向我展示了如何做到这一点后,我想出了其余的!基本上它永远无法回忆起这个对象,因为它从来不知道它们是相关的......愚蠢的我!再次感谢!

相关问题