我有一个场景,其中我有 2 个 VC,它们是 -
VC1 - 输入详细信息并保存数据。
VC2 - 在表视图中显示数据。
现在我希望每当我选择任何特定行时我都会在特定行更新我的数据库。为此,我将在使用以下代码的特定行传递选定的托管对象。
VC2 类名 -ViewController
获取请求的代码 -
func fetchData()
{
let appdelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let managedContext = appdelegate.managedObjectContext
let fetchRequest = NSFetchRequest(entityName: "Person")
do
{
people = try managedContext.executeFetchRequest(fetchRequest) as! [NSManagedObject]
print(people)
print("FETCHING DATA")
}
catch let error as NSError
{
print("could not fetch \(error), \(error.userInfo)")
}
}
用于传递所选行中的数据的代码 -
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)
{
if segue.identifier == "segueupdate"
{
let update = segue.destinationViewController as! EnterDetailViewController
// var managedobject = NSManagedObject()
let indexpath = self.tableview.indexPathForSelectedRow
let row = indexpath?.row
let managedobject = people[row!]
update.managedobjectt = managedobject
}
}
VC2 类名 -EnterDetailViewController
class EnterDetailViewController: UIViewController {
@IBOutlet weak var nametextfield: UITextField!
var managedobjectt = NSManagedObject()
override func viewDidLoad() {
super.viewDidLoad()
if let s = managedobjectt.valueForKey("name") as? String
{
nametextfield.text = s //here I show the user the existing name value
}
}
现在在我的保存功能中我这样做 -
@IBAction func savedata(sender: AnyObject)
{
let appdelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let managedcontext = appdelegate.managedObjectContext
let entity = NSEntityDescription.entityForName("Person", inManagedObjectContext: managedcontext)
let person = NSManagedObject(entity: entity!, insertIntoManagedObjectContext: managedcontext)
person.setValue(self.nametextfield.text, forKey: "name")
do
{
try managedcontext.save()
print("SAVED")
}
catch let error as NSError
{
print("could not save \(error), \(error.userInfo)")
}
self.navigationController?.popToRootViewControllerAnimated(true)
}
在这里,我希望编译器检查收到的托管对象并更新对数据库的任何更改,但我无法执行此操作,因为 SWIFT 不接受托管对象类型作为条件,但我能够通过 ObjC 中的这一概念实现数据库更新。
另一个问题是当我尝试编译时出现错误 -
未能在 NSManagedObject 类上调用指定的初始值设定项
'NS管理对象'
in the prepereforsegue()
方法。那么如何解决这个问题并进行更新呢。