Я работаю над основным приложением данных, и в настоящее время у меня есть правильная настройка методов, чтобы сохранить основной объект, сохраняя имя колоды пользователей, но он не сохраняет отзыв вторичной объект, хотя метод, используемый для сохранения обоих, идентичен. Первичный сохраняет второе, хотя мне интересно, имеет ли значение порядок сохранения объектов. Я знаю, что это реляционная, но я полагал, что неважно, было ли вторичное вызвано, чтобы сохранить до первичного. Я по-прежнему новичок в основных данных, поэтому достаточно простого ответа. Если мне сначала нужно сохранить первичный объект объекта, я создам приложение таким образом, чтобы это произошло, иначе мне, возможно, придется переустановить код, чтобы понять, почему он не вызывает.Первичная сущность против вторичных объектов о объектах сохранения данных ядра
Это код, который должен сохранить до названия сохраняются в реляционной образом:
@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)
}
Я надеюсь, что это достаточно, чтобы дать вам представление. Я проверил отношения, и все они кажутся правильными в модели. Я извиняюсь за продвинутый подход к тому, как некоторые из кодов выглядят, я планирую сократить его после того, как все редактирование сделано и работает.
Метод 'save'' NSManagedObjectContext' сохраняет ВСЕ изменения в контексте. Таким образом, последовательность, в которой они созданы, не имеет значения. Отредактируйте сообщение, чтобы включить код - есть и другие проблемы. – pbasdf
Я изменил сообщение, как и спросил, надеюсь, это даст вам представление о том, что я сделал, и что я, вероятно, ошибаюсь. Также не уверен, имеет ли значение для простой базовой модели данных, но я просто использую делегат приложения в качестве постоянного координатора хранилища, поскольку я не был достаточно храбр, чтобы экспериментировать за пределами этого еще и сам себя учил. Я не думал, что это очень важно для простого приложения, которое хранит только основные данные. – Matthew
Извините, что я осознал одну вещь, о которой забыл упомянуть в запросе выборки, который вызывает колоду с именем «classname», с которым я попытался использовать фактический класс ClassSelection, а не колоду, и все еще имел ту же всплывающую ошибку, которая была Thread 1: EXC_BAD_ACCESS (code = 1, address = 0x0) – Matthew