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

Core data 快速更新现有项目核心数据,core-data,swift,save,xcode6,Core Data,Swift,Save,Xcode6,我看到了许多使用一个视图控制器添加或更新核心数据项的示例。对于在单独的视图控制器中执行此操作的利弊有何想法 我的代码试图做更新,我想我错过了一个关键部分,让它工作 @IBAction func saveItem(sender: AnyObject) { let appDel: AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate let context: NSManagedObjec

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

我的代码试图做更新,我想我错过了一个关键部分,让它工作

    @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为String,forKey:“name”)

处获取(lldb)时,线程断点位于existingItem.setValue(teaname.text为String,forKey:“name”)

看起来您实际上没有要更新的特定对象。我使用以下函数通过对象的唯一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)

    }
}
func updateEvent(eventDict:Dictionary,id:Int){
如果let event:event=fetchEvent(id){
println(事件)
event.eID=id
event.eTitle=getString(eventDict[“title”])
event.eLocation=getString(eventDict[“位置”])
event.eDescription=getString(eventDict[“description”])
event.eStart=getDate(eventDict[“startDate”])
event.eEnd=getDate(eventDict[“endDate”])
event.eMod=NSDate()
event.eSecID=getSecID(事件)
}
}

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

看起来您实际上没有要更新的特定对象。我使用以下函数通过对象的唯一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)

    }
}
func updateEvent(eventDict:Dictionary,id:Int){
如果let event:event=fetchEvent(id){
println(事件)
event.eID=id
event.eTitle=getString(eventDict[“title”])
event.eLocation=getString(eventDict[“位置”])
event.eDescription=getString(eventDict[“description”])
event.eStart=getDate(eventDict[“startDate”])
event.eEnd=getDate(eventDict[“endDate”])
event.eMod=NSDate()
event.eSecID=getSecID(事件)
}
}

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

看起来您实际上没有要更新的特定对象。我使用以下函数通过对象的唯一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)

    }
}
func updateEvent(eventDict:Dictionary,id:Int){
如果let event:event=fetchEvent(id){
println(事件)
event.eID=id
event.eTitle=getString(eventDict[“title”])
event.eLocation=getString(eventDict[“位置”])
event.eDescription=getString(eventDict[“description”])
event.eStart=getDate(eventDict[“startDate”])
event.eEnd=getDate(eventDict[“endDate”])
event.eMod=NSDate()
event.eSecID=getSecID(事件)
}
}

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

看起来您实际上没有要更新的特定对象。我使用以下函数通过对象的唯一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)

    }
}
func updateEvent(eventDict:Dictionary,id:Int){
如果let event:event=fetchEvent(id){
println(事件)
event.eID=id
event.eTitle=getString(eventDict[“title”])
event.eLocation=getString(eventDict[“位置”])
event.eDescription=getString(eventDict[“description”])
event.eStart=getDate(eventDict[“startDate”])
event.eEnd=getDate(eventDict[“endDate”])
event.eMod=NSDate()
event.eSecID=getSecID(事件)
}
}

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

既然您使用
existingItem=dataModel.self
赋值,那么什么是
dataModel
,它的
self
属性是什么?既然您使用
existingItem=dataModel.self
赋值,那么
dataModel
是什么,它的
self
属性是什么?既然你用
existingItem=dataModel.self
赋值,那么什么是
dataModel
,它的
self
属性是什么?既然你用
existingItem=dataModel.self
赋值,那么
dataModel
是什么,它的
self
属性是什么?猎犬你的代码示例帮了大忙。我确实在代码的另一部分中提取了对象。所以改变了我的想法,从上下文开始,它起了作用。让上下文:NSManagedObjectContext=appDel.managedObjectContext!让freq=NSFetchRequest(entityName:“Teas”)var existingItem=dataModel.self myData=context.executeFetchRequest(freq,错误:nil)!var data:NSManagedObject=myData[row]作为NSManagedObjectBloodhound,您的代码示例是一个很大的帮助。我确实在代码的另一部分中提取了对象。所以改变了我的想法,从上下文开始,它起了作用。让上下文:NSManagedObjectContext=appDel.managedObjectContext!让freq=NSFetchRequest(entityName:“Teas”)var existingItem=dataModel.self myData=context.executeFetchRequest(freq,错误:nil)!var data:NSManagedObject=myData[row]作为NSManagedObjectBloodhound,您的代码示例是一个很大的帮助。我确实在代码的另一部分中提取了对象。所以改变了我的想法,从上下文开始,它起了作用。让上下文:NSManagedObjectContext=appDel.managedObjectContext!让freq=NSFetchRequest(entityName:“Teas”)var existingItem=dataModel.self myData=context.executeFetchRequest(freq,错误:nil)!var data:NSManagedObject=myData[row]作为NSManagedObjectBloodhound,您的代码示例是一个很大的帮助。我