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

标签 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)

}

我希望这足以给你一个想法。我检查了这些关系,它们在模型中似乎都是正确的。对于某些代码的外观,我深表歉意,我计划在完成所有编辑并正常工作后将其缩小。

最佳答案

感谢 pbasdf 在这方面帮助我。他打开的聊天记录实际上包含了需要做的事情。我只是没有保存关系并将对象从一个 View Controller 传递到下一个 View Controller 。在用一个例子向我展示了如何做到这一点之后,我想出了剩下的!基本上它永远无法记忆起这个对象,因为它从来不知道它们是相关的……愚蠢的我!再次感谢!

关于swift - 关于核心数据保存对象的主要实体与次要实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31903027/

相关文章:

swift - Sprite 节点的起始位置

ios - 核心数据-数据故障

ios - UIManagedDocument,后台线程和父上下文

ios - 使用 Core Data(在 SwiftUI 中)提供的数据并与另一个 View 共享

ios - 检查是否通过文本字段和日期选择器选择了日期

swift - 失败的初始化器和存储的属性

ios - 'Appdelegate' 没有可见的@interface 声明选择器 'managedObjectContext'

objective-c - 核心数据打开文件脏,不一致的缺失值,fetch返回空数组

ios - 3D Touch Quick Action 4 项目限制?

ios - AVPlayer - 播放音量非常低