下面是我採取的步驟解析數據刪除 -SWIFT:當UIButton的行動進行
第1步:我在下面的字段中輸入值,他們得到保存在解析表。完美的作品。
第2步:我再次進入這個屏幕,並點擊「提交」再次沒有編輯的字段,並解析錶行被刪除。
我想弄清楚爲什麼會發生這種情況。所需的功能是,當用戶第一次加載此屏幕時,這些字段是空白的。此後,此屏幕加載後,現有值將顯示字段,如果用戶編輯字段並單擊「提交」,則值將有機會。
這是我對這個特殊的視圖控制器代碼 -
import UIKit
import Parse
class RSVPViewController: UIViewController {
/*----------- ~ OUTLETS AND ACTIONS ~ -----------*/
//View Controller Title Bar Outlets
@IBOutlet weak var usernameTitle: UIBarButtonItem!
@IBOutlet weak var menuTitle: UIBarButtonItem!
//View Controller Body Outlets
@IBOutlet weak var label1: UILabel!
@IBOutlet weak var label2: UILabel!
@IBOutlet weak var label3: UILabel!
@IBOutlet weak var label4: UILabel!
@IBOutlet weak var label1Field: UITextField!
@IBOutlet weak var label2Field: UITextField!
@IBOutlet weak var label3Field: UITextField!
@IBOutlet weak var label4Field: UITextField!
//View Controller Body Actions
@IBAction func submitButton(sender: AnyObject) {
let query = PFQuery(className:"RSVPData")
query.whereKey("username", equalTo: (PFUser.currentUser()?.username)!)
query.findObjectsInBackgroundWithBlock { (objects: [PFObject]?, error: NSError?) -> Void in
if error == nil {
if let objects = objects! as? [PFObject] {
for object in objects {
object.deleteInBackground()
}
}
} else {
print(error)
}
}
let RSVPData = PFObject(className: "RSVPData")
RSVPData["label1"] = label1Field.text
RSVPData["label2"] = label2Field.text
RSVPData["label3"] = label3Field.text
RSVPData["label4"] = label4Field.text
RSVPData["username"] = PFUser.currentUser()?.username
RSVPData.saveInBackgroundWithBlock {
(success: Bool, error: NSError?) -> Void in
if (success) {
if let error = error {
if let errorString = error.userInfo["error"] as? String {
self.displayAlert("Failed", message: errorString)
}
} else {
self.performSegueWithIdentifier("RSVPToMain", sender: self)
}
} else {
// There was a problem, check error.description
}
}
}
/*----------- ~ MAIN THREAD ~ -----------*/
override func viewDidLoad() {
super.viewDidLoad()
//Run title bar function
TitleBar()
label1.text = "Label 1"
label2.text = "Label 2"
label3.text = "Label 3"
label4.text = "Label 4"
let query = PFQuery(className:"RSVPData")
query.whereKey("username", equalTo: (PFUser.currentUser()?.username)!)
query.findObjectsInBackgroundWithBlock { (objects: [PFObject]?, error: NSError?) -> Void in
if error == nil {
if let objects = objects! as? [PFObject] {
for object in objects {
self.label1Field.text = object["label1"] as? String
self.label2Field.text = object["label2"] as? String
self.label3Field.text = object["label3"] as? String
self.label4Field.text = object["label4"] as? String
}
}
} else {
print(error)
}
}
}
/*----------- ~ FUNCTIONS ~ -----------*/
//Function containing all title bar instructions
func TitleBar() {
/*----------- ~ NAVIGATION BAR (USER INTERFACE) ~ -----------*/
//Set the navigation bar tet color and size
let nav = self.navigationController?.navigationBar
nav?.titleTextAttributes = [NSFontAttributeName: UIFont(name: "HelveticaNeue-Light", size: 20)!, NSForegroundColorAttributeName: UIColor(red: 255/255, green: 255/255, blue: 255/255, alpha: 1.0)]
/*----------- ~ OUTLET - 'usernameTitle' ~ -----------*/
//Set the 'usernameTitle' font and size
usernameTitle.setTitleTextAttributes([NSFontAttributeName: UIFont(name: "Arial", size: 11)!], forState: UIControlState.Normal)
//Set the 'usernameTitle' outlet to the current user
usernameTitle.title = PFUser.currentUser()?.username
}
//Function to display an alert
func displayAlert(title: String, message: String) {
let alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))
self.presentViewController(alert, animated: true, completion: nil)
}
SOLUTION:
@IBAction func submitButton(sender: AnyObject) {
let query = PFQuery(className:"RSVPData")
query.whereKey("username", equalTo: (PFUser.currentUser()?.username)!)
query.findObjectsInBackgroundWithBlock { (object: [PFObject]?, error: NSError?) -> Void in
if error == nil {
if object!.count > 0 {
if let object = object! as? [PFObject] {
for object in object {
object["label1"] = self.label1Field.text
object["label2"] = self.label2Field.text
object["label3"] = self.label3Field.text
object["label4"] = self.label4Field.text
object.saveInBackground()
}
self.performSegueWithIdentifier("RSVPToMain", sender: self)
}
} else if object?.count == 0 {
let RSVPData = PFObject(className: "RSVPData")
RSVPData["label1"] = self.label1Field.text
RSVPData["label2"] = self.label2Field.text
RSVPData["label3"] = self.label3Field.text
RSVPData["label4"] = self.label4Field.text
RSVPData["username"] = PFUser.currentUser()?.username
RSVPData.saveInBackgroundWithBlock {
(success: Bool, error: NSError?) -> Void in
if (success) {
if let error = error {
if let errorString = error.userInfo["error"] as? String {
self.displayAlert("Failed", message: errorString)
}
} else {
self.performSegueWithIdentifier("RSVPToMain", sender: self)
}
} else {
// There was a problem, check error.description
}
}
}
} else {
print(error)
}
}
}
我不是非常精通swift,但不是你刪除所有對象,你找到任何與object.deleteInBackground()你實際上試圖用這個聲明? – Yan
而不是這些「/ * -----------〜OUTLETS AND ACTIONS〜----------- * /」註釋,你真的應該使用// MARK:出口和動作。 這可以幫助類導航遠遠超過一些詳細評論 – Moriya
@Yan,當提交按鈕被點擊時,我想表中的舊值被替換爲新的。我這樣做的方式是刪除舊行並添加一個新行。你能提出一個更好的方法來完成這個嗎?謝謝! – SB2015