快速更新现有项目核心数据 [英] Swift update existing item core data

查看:61
本文介绍了快速更新现有项目核心数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经看到了许多使用一个视图控制器来添加或更新核心数据项的示例。对在单独的视图控制器中执行操作的利弊有何看法?

I have seen many examples with one view controller for adding or updating core data items. Any thoughts on pros or cons of doing in separate view controllers?

我尝试进行更新的代码我想我缺少使它起作用的一个关键部分。

My code for trying to do the update I think I am missing one key part to get it to work.

    @IBAction func saveItem(sender: AnyObject) {
    let appDel: AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
    let context: NSManagedObjectContext = appDel.managedObjectContext!
    let en = NSEntityDescription.entityForName("Items", inManagedObjectContext: context)
    var existingItem = dataModel.self

    if (row > 0) {
        println(teaname.text)

       existingItem.setValue(teaname.text as String, forKey: "name")
       existingItem.setValue(teatype.text as String, forKey: "type")
       existingItem.setValue(qty.text as String, forKey: "amount")
       existingItem.setValue(temp.text as String, forKey: "temp")
       existingItem.setValue(time.text as String, forKey: "time")
    } else {

    }

    context.save(nil)

    self.navigationController?.popViewControllerAnimated(true)

}

我得到(lldb)存在项目.setValue(teaname.text作为字符串,forKey:名称)处的线程断点

I get (lldb) with a thread breakpoint at existingItem.setValue(teaname.text as String, forKey: "name")

推荐答案

实际上有一个要更新的特定对象。我使用以下函数通过其唯一ID来获取对象。只有拥有对象(我的事件称为Event)后,您才能对其进行更新。

It does not appear you actually have a specific object to update. I use the following function to fetch an object by its unique ID. Only once you have an object (mine is called Event) can you update it.

func fetchEvent(eventID: Int) -> Event? {

    // Define fetch request/predicate/sort descriptors
    var fetchRequest = NSFetchRequest(entityName: "Event")
    let sortSections = NSSortDescriptor(key: "eTitle", ascending: true)
    let sortDescriptor = NSSortDescriptor(key: "eID", ascending: true)
    let predicate = NSPredicate(format: "eID == \(eventID)", argumentArray: nil)
    var error = NSErrorPointer()

    // Assign fetch request properties
    fetchRequest.predicate = predicate
    fetchRequest.sortDescriptors = [sortSections, sortDescriptor]
    fetchRequest.fetchBatchSize = 1
    fetchRequest.fetchLimit = 1

    // Handle results
    let fetchedResults = managedObjectContext?.executeFetchRequest(fetchRequest, error: error)

    if fetchedResults?.count != 0 {

        if let fetchedEvent: Event = fetchedResults![0] as? Event {
            println("Fetched object with ID = \(eventID). The title of this object is '\(fetchedEvent.eTitle)'")
            return fetchedEvent
        }
    }
    return nil
}

一旦获取了对象并有一个要更新的核心数据对象,那么您可以像这样进行更新。

Once you have fetched an object and have a core data object to update, then you can update it like so.

func updateEvent(eventDict: Dictionary<String, AnyObject>, id: Int) {
    if let event: Event = fetchEvent(id) {
        println(event)
        event.eID = id
        event.eTitle = getString(eventDict["title"])
        event.eLocation = getString(eventDict["location"])
        event.eDescription = getString(eventDict["description"])
        event.eStart = getDate(eventDict["startDate"])
        event.eEnd = getDate(eventDict["endDate"])
        event.eMod = NSDate()
        event.eSecID = getSecID(event)

    }
}

然后您可能想保存托管对象上下文。

And then you may want to save your managed object context.

这篇关于快速更新现有项目核心数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆