我正在尝试使用SWIFT中的核心数据进行写入和读取。在编写新数据和读取现有数据时,一切都很好。但是现在我想更新一条记录(让我们说“pagina”是“1”)突然间我觉得完全失去了!我已经研究过批量更新,因为它似乎是最好的方法。不幸的是,我发现的所有教程对我来说似乎都不够基本。
我创建了实体“Stories”并添加了三个属性:“pagina”(String),“plaats”(String)和“naam”(String)。我打算这样做的方法是从txtPagina.text中检索页码并将其存储在变量Pagina中。 然后使用txtPlaats.text和txtNaam.text的UITextField内容更新记录,其中pagina = Pagina。看起来很简单。不幸的是,我似乎无法弄清楚批量更新。 谁能帮我?我完全迷失在这里。
@IBAction func btnSave(){
var Pagina = txtPagina.text
var appDel:AppDelegate = (UIApplication.sharedApplication().delegate as AppDelegate)
var context:NSManagedObjectContext = appDel.managedObjectContext!
//check if data exists
var request = NSFetchRequest(entityName: "Stories")
var results:NSArray = context.executeFetchRequest(request, error:nil)!
if(results.count > 0) {
Pagina = "\(results.count)"
txtPagina.text = Pagina
//code to update plaats and naam where pagina = Pagina
} else {
var newStory = NSEntityDescription.insertNewObjectForEntityForName("Stories", inManagedObjectContext: context) as NSManagedObject
newStory.setValue(Pagina, forKey: "pagina")
newStory.setValue("\(txtPlaats.text)", forKey: "plaats")
newStory.setValue("\(txtNaam.text)", forKey: "naam")
context.save(nil)
println(newStory)
println("Object Saved.")
}
}
答案 0 :(得分:0)
如果您遇到的唯一问题是更新记录,则看起来您的问题是您在更新后无法拨打context.save()
。这应该可以解决这个问题。
答案 1 :(得分:0)
我现在有一些工作,但我不确定它是最有效的方式:
我创建了一个名为Stories的课程:
import UIKit
import CoreData
@objc(Stories)
class Stories: NSManagedObject {
@NSManaged var pagina:String
@NSManaged var plaats:String
@NSManaged var naam:String
}
现在我的btnSave动作是这样的:
@IBAction func brnSave(sender: AnyObject) {
var appDel:AppDelegate = (UIApplication.sharedApplication().delegate as AppDelegate)
var context:NSManagedObjectContext = appDel.managedObjectContext!
var request = NSFetchRequest(entityName: "Stories")
var results:NSArray = context.executeFetchRequest(request, error: nil) as [Stories]
if (results.count > 0) {
println(results.count)
if (results.count >= txtPagina.text.toInt()) {
for res in results{
var data = res as Stories
println(data.plaats)
if (data.pagina == txtPagina.text) {
data.plaats = txtPlaats.text
data.naam = txtNaam.text
context.save(nil)
println("Page \(data.pagina) updated")
}
}
} else {
// Save new Story
var ent = NSEntityDescription.entityForName("Stories", inManagedObjectContext: context)
var newStory = Stories(entity: ent!, insertIntoManagedObjectContext: context)
newStory.pagina = txtPagina.text
newStory.plaats = txtPlaats.text
newStory.naam = txtNaam.text
context.save(nil)
println("New story saved")
// Save new Story end
}
} else {
// Save new Story
var ent = NSEntityDescription.entityForName("Stories", inManagedObjectContext: context)
var newStory = Stories(entity: ent!, insertIntoManagedObjectContext: context)
newStory.pagina = txtPagina.text
newStory.plaats = txtPlaats.text
newStory.naam = txtNaam.text
context.save(nil)
println(newStory)
println("New story saved")
// Save new Story end
}
}
代码有效,但似乎并不完美。 有没有办法让这个更有效率?更新数组时,我基本上重写了整个coredata表,而不仅仅是更新已更改的数据。我只能想象当有更多数据时,这会有什么表现呢!