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,您的代码示例是一个很大的帮助。我