我正在开发一个核心数据应用程序,目前我有正确设置的方法来保存主要对象,保存用户卡片组的名称,但它不保存召回次要对象,即使用于保存两者的方法是完全相同的。主要的确实保存了第二个,我想知道对象保存的顺序是否重要。我知道这是一个关系,但我认为如果在主要之前调用辅助来保存并不重要。我对核心数据还是陌生的,所以一个简单的答案就足够了。如果我需要先保存主实体对象,那么我将以这种情况发生的方式构建应用程序,否则我可能不得不重新查看代码以弄清楚为什么它没有被召回。
这是在以关系方式保存名称之前应该保存的代码:
@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/