Простое приложение начинается с представления таблицы в навигационном контроллере с кнопкой добавления. Кнопка «Добавить» открывает новое представление с текстовыми полями, нажатие кнопки «Сохранить» возвращает вас к (обновленному) представлению таблицы. Моя проблема в том, когда я пытаюсь сохранить MOC, ничего не происходит, и приложение падает на это в отладчике:Swift Управляемый объект Контекст Сохранение сбой
First name is: John
Last name is: Doe
Phone number is: 123456789
Before Save
(lldb)
и (**** является линия она падает на)
libswiftCore.dylib`swift_dynamicCastClassUnconditional:
0x10c385860: pushq %rbp
0x10c385861: movq %rsp, %rbp
0x10c385864: testq %rdi, %rdi
0x10c385867: je 0x10c38589e ; swift_dynamicCastClassUnconditional + 62
0x10c385869: movabsq $-0x7fffffffffffffff, %rax
0x10c385873: testq %rax, %rdi
0x10c385876: jne 0x10c38589e ; swift_dynamicCastClassUnconditional + 62
0x10c385878: leaq 0xb52e9(%rip), %rax
0x10c38587f: movq (%rax), %rax
0x10c385882: andq (%rdi), %rax
0x10c385885: nopw %cs:(%rax,%rax)
0x10c385890: cmpq %rsi, %rax
0x10c385893: je 0x10c3858ad ; swift_dynamicCastClassUnconditional + 77
0x10c385895: movq 0x8(%rax), %rax
0x10c385899: testq %rax, %rax
0x10c38589c: jne 0x10c385890 ; swift_dynamicCastClassUnconditional + 48
0x10c38589e: leaq 0x36b7d(%rip), %rax ; "Swift dynamic cast failed"
0x10c3858a5: movq %rax, 0xb4c0c(%rip) ; gCRAnnotations + 8
0x10c3858ac: int3
****0x10c3858ad: movq %rdi, %rax
0x10c3858b0: popq %rbp
0x10c3858b1: retq
0x10c3858b2: nopw %cs:(%rax,%rax)
Вот моя функция сохранения:
@IBAction func save() {
if let moc = (UIApplication.sharedApplication().delegate as AppDelegate).managedObjectContext {
employee = NSEntityDescription.insertNewObjectForEntityForName("Employee", inManagedObjectContext: moc) as Employee
contact = NSEntityDescription.insertNewObjectForEntityForName("Contact", inManagedObjectContext: moc) as Contact
employee.contact = contact
//println("First name is: " + employee.contact.firstName)
employee.contact.firstName = firstNameTextField.text
println("First name is: " + employee.contact.firstName)
employee.contact.lastName = lastNameTextField.text
println("Last name is: " + employee.contact.lastName)
employee.contact.phoneNumber = phoneNumberTextField.text
println("Phone number is: " + employee.contact.phoneNumber)
var e: NSError?
println("Before Save")
if moc.save(&e) != true {
println("After Save")
println("insert error: \(e!.localizedDescription)")
return
}
println("After Save")
// Execute the unwind segue and go back to the home screen
performSegueWithIdentifier("unwindToHomeScreen", sender: self)
}
UPDATE
Наймите й Класс:
import Foundation
import CoreData
class Employee: NSManagedObject {
@NSManaged var wage: NSNumber
@NSManaged var socialInsuranceNumber: NSNumber
@NSManaged var contact: Contact
}
Контакта Класс:
import Foundation
import CoreData
class Contact: NSManagedObject {
@NSManaged var firstName: String
@NSManaged var lastName: String
@NSManaged var phoneNumber: String
@NSManaged var employee: NSManagedObject
}
Пожалуйста, покажите подклассы Employee и Contact управляемых объектов. –
Отредактировано соответственно – jjatie
Почему у вас есть переменная сотрудника в вашем Contact-Classic? Вы нигде не устанавливаете его. Удалите его и повторите попытку. – Christian