【发布时间】:2015-02-20 20:57:51
【问题描述】:
我正在尝试更新 Core Data 中的属性,然后显示它。但是,当我告诉程序显示它时,它会显示原始值。
根据下面的代码,username 设置为字符串。我 100% 知道 username 已保存到 Core Data 中。但是,当我尝试更新它时,它会保存到 Core Data,但会打印出旧值。我怎样才能只打印出“最新”的值?
import UIKit
import CoreData
class NameSettings: UIViewController {
@IBOutlet var nameText: UITextField!
var userID: String!
var username: String!
override func viewDidLoad() {
super.viewDidLoad()
var appDel:AppDelegate = (UIApplication.sharedApplication().delegate as AppDelegate)
var context:NSManagedObjectContext = appDel.managedObjectContext!
var request = NSFetchRequest(entityName: "Users")
request.returnsObjectsAsFaults = false
var results: NSArray = context.executeFetchRequest(request, error: nil)!
var res = results [0] as NSManagedObject
userID = res.valueForKey("userID") as String
username = res.valueForKey("username") as String
println(username)
nameText.text = username
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func saveTapped(sender: AnyObject) {
//println(userID)
var query = PFQuery(className:"_User")
query.getObjectInBackgroundWithId(userID) {
(update1: PFObject!, error: NSError!) -> Void in
if error == nil {
update1["username"] = self.nameText.text
update1.saveEventually()
var appDel:AppDelegate = (UIApplication.sharedApplication().delegate as AppDelegate)
var context:NSManagedObjectContext = appDel.managedObjectContext!
var updateUser = NSEntityDescription.insertNewObjectForEntityForName("Users", inManagedObjectContext: context) as NSManagedObject
updateUser.setValue(self.nameText.text, forKey: "username")
context.save(nil)
//println(self.nameText.text)
self.navigationController?.popToRootViewControllerAnimated(true)
}
}
}
}
注意:所有println 仅用于调试。
【问题讨论】:
-
使用
insertNewObjectForEntityForName,您正在插入一个新值。不覆盖旧的。 -
哦....我不知道核心数据的来龙去脉。你介意帮我解决这个问题吗? :)
-
也许这个答案会有所帮助:stackoverflow.com/a/10572134/2274694
-
我对 Obj-C 一无所知..... :/
-
有没有办法可以删除当前值,然后“插入”新值?