繁体   English   中英

CoreData更新后不保存信息

[英]CoreData not saving information after being updated

该功能应该在每次按下addButton时将当前日期添加到存储在内存中的列表中,但是无论何时关闭并重新加载应用程序,都不会出现新日期。 切换视图后,数据似乎也消失了。

var selectedPersonFirst = ""
var selectedPersonLast = ""
let today = NSDate()



let managedObjectContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext

@IBAction func addButtonPressed(sender: AnyObject) {

    let entityDescription = NSEntityDescription.entityForName("People", inManagedObjectContext: managedObjectContext!)
    let request = NSFetchRequest()
    request.entity = entityDescription

    let firstPred = NSPredicate(format: "(firstName = %@)", selectedPersonFirst)
    let secondPred = NSPredicate(format: "(lastName = %@)", selectedPersonLast)

    let predicate = NSCompoundPredicate(type: NSCompoundPredicateType.OrPredicateType, subpredicates: [firstPred, secondPred])
    request.predicate = predicate

    var error: NSError?

    var objects = managedObjectContext?.executeFetchRequest(request, error: &error)

    if let results = objects{

        let days = results[0].valueForKey("days") as! NSMutableArray
        days.addObject(NSDate())

        let person = results[0] as! People
        person.setValue(days, forKey: "days")

    }

    managedObjectContext!.save(nil)

    self.tableView.reloadData()

}

这是NSManagedObject的people子类:

import Foundation
import CoreData

class People: NSManagedObject {

    @NSManaged var days: AnyObject
    @NSManaged var dayZero: NSDate
    @NSManaged var firstName: String
    @NSManaged var gender: String
    @NSManaged var lastName: String

}

创建NSMutableArray的days ViewController:

import UIKit
import CoreData

class NewPersonViewController: UIViewController {

    @IBOutlet weak var firstName: UITextField!
    @IBOutlet weak var lastName: UITextField!
    @IBOutlet weak var gender: UISegmentedControl!
    @IBOutlet weak var dayZeroDate: UIDatePicker!

    let managedObjectContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext

    var personName : String = ""
    var currentDayNumber : Int? = nil

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }




    // MARK: - Navigation

    // In a storyboard-based application, you will often want to do a little preparation before navigation
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        // Get the new view controller using segue.destinationViewController.
        // Pass the selected object to the new view controller.

        if segue.identifier == "DoneNewPersonSegue" {

            let entityDescription = NSEntityDescription.entityForName("People", inManagedObjectContext: managedObjectContext!)

            let person = People(entity: entityDescription!, insertIntoManagedObjectContext: managedObjectContext)

            person.firstName = self.firstName.text
            person.lastName = self.lastName.text
            person.days = NSMutableArray()
            person.gender = gender.description
            person.dayZero = dayZeroDate.date

            save()

        }



    }

    func save() {
        var error : NSError?
        if(managedObjectContext!.save(&error) ) {
            println(error?.localizedDescription)
        }
    }


}

资料模型:

资料模型

问题是我使用的是可变类型,因此更改未调用setter方法。 我更改了代码以创建对象的副本,以便可以识别出更改:

let days1 = results[0].valueForKey("days") as! NSMutableArray
let days = days1.mutableCopy() as! NSMutableArray 

days.addObject(NSDate())
let person = results[0] as! People

person.setValue(days, forKey: "days”)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM