快速更新现有项目核心数据



我见过许多使用一个视图控制器添加或更新核心数据项的示例。关于在单独的视图控制器中执行的利弊的任何想法?

尝试进行更新的代码我认为我缺少一个使其工作的关键部分。

    @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)
}

我在 existingItem.setValue(teaname.text as String, forKey: "name") 处得到一个线程断点 (lldb)

您似乎实际上没有要更新的特定对象。我使用以下函数通过其唯一 ID 获取对象。只有当你有一个对象(我的称为事件)时,你才能更新它。

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
}
获取对象并更新核心

数据对象后,您可以像这样更新它。

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)
    }
}

然后,您可能希望保存托管对象上下文。

最新更新