2014-11-06 58 views
2

我有以下的数据库,将NSManagedObject从一个类传递给Swift编程语言中的其他类?

enter image description here

我有以下的员工NSManagedObject类。

进口基金会 进口CoreData

class Employee: NSManagedObject { 

    @NSManaged var age: NSNumber 
    @NSManaged var firstName: String 
    @NSManaged var gender: String 
    @NSManaged var lastName: String 
    @NSManaged var salary: NSNumber 

} 

我对其中包含5个UITextFields和一个UIButton的在数据库中添加值UIViewController类。

如果我insertValue在同一个班级,像

let employee:Employee = NSEntityDescription.insertNewObjectForEntityForName("Employee", inManagedObjectContext: self.managedObjectContext!) as Employee 

它工作正常,但我跟对象应用程序的面向结构,并提出了DatabaseManager.swift类,

所以现在发我面临的是将Controller类中的NSManagedObject传递给DatabaseManager类。

我编码如下,但它给错误。

@IBAction func addToDatabase(sender: UIButton) { 
    println("Add to Database is clicked") 

    var employee:Employee = Employee() //Employee is subclass of NSManagedObject 

    employee.firstName = textfield_firstName.text 
    employee.lastName = textfield_lastName.text 
    employee.gender = textfield_gender.text 
    employee.age = (textfield_age.text as String).toInt()! 
    employee.salary = (textfield_salary.text as String).toInt()! 

    var databaseManager:DatabaseManager = DatabaseManager() 
    databaseManager.saveEmployee(employee) 

} 

错误:

2014-11-06 10:34:46.710 CoreDataWithSwift[588:9220] CoreData: error: Failed to call designated initializer on NSManagedObject class 'CoreDataWithSwift.Employee' 
2014-11-06 10:34:46.736 CoreDataWithSwift[588:9220] -[CoreDataWithSwift.Employee setFirstName:]: unrecognized selector sent to instance 0x7fa269e20800 
2014-11-06 10:34:46.756 CoreDataWithSwift[588:9220] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[CoreDataWithSwift.Employee setFirstName:]: unrecognized selector sent to instance 0x7fa269e20800' 

感谢。

+0

请参阅http://stackoverflow.com/a/23835907/1187415。这是针对Objective-C的,但底层问题是相同的。 – 2014-11-06 06:47:47

回答

1

你不应该直接创建NSManagedObject实例,而是拨打:

var employee = NSEntityDescription.insertNewObjectForEntityForName(entityName, inManagedObjectContext: managedObjectContext) as Employee? 

,然后更改员工的属性并保存结果。

+0

我知道这很好,但我希望所有保存查询和检索Databasemanager类中的查询,并且想要将控制对象传递给该类, – 2014-11-06 07:34:48

+0

您可以尝试这种方法:http://stackoverflow.com/a/5547092/ 1176162 – Yonat 2014-11-06 07:41:09

+0

第二个想法,这将无法正常工作,因为NSEntityDescription需要一个NSManagedObjectContext。 – Yonat 2014-11-06 11:06:57