2015-12-11 3 views
0

Итак, когда пользователь входит в систему/регистрируется, им предлагается ввести имя и сохранить его. когда они нажимают кнопку «Сохранить», новая информация отправляется для разбора и сохранения. Мои проблемы в том, что если я зарегистрирую одного пользователя, дайте им имя, сохранить и выйти из системы, а затем подпишите нового пользователя, дайте им имя и нажмите «Сохранить», приложение выйдет из строя. Затем я могу повторно запустить приложение и сохранить его имя снова, и оно работает.Сбой при сохранении нового пользователя Parse Swift

Я установил точку останова исключения, и он рвется на: user.saveInBackground() Это мой код для кнопки сохранения

Обновление: Я только что узнал, что всякий раз, когда я меняю имена пользователей и сохранить затем выйти из системы, а затем войдите в систему с другим пользователем и сохраните новое имя для них.

import UIKit 
import Parse 

class ProfileViewController: UIViewController, UITextFieldDelegate, UINavigationBarDelegate { 

var activityIndicator = UIActivityIndicatorView() 

func alertDismiss(title: String, message: String) { 
    var alertDismiss = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.Alert) 
    alertDismiss.addAction(UIAlertAction(title: "Ok", style: .Default, handler: { (action) -> Void in 
     self.dismissViewControllerAnimated(true, completion: nil) 
    })) 
    self.presentViewController(alertDismiss, animated: true, completion: nil) 
} 

var user: PFUser? = PFUser.currentUser() 

@IBOutlet weak var locationServiceSwitch: UISwitch! 
@IBOutlet weak var profileNavigationBar: UINavigationBar! 
@IBOutlet weak var saveButton: UIButton! 
@IBOutlet weak var nameTextField: UITextField! 
@IBOutlet weak var usernameLabel: UILabel! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    profileNavigationBar.delegate = self 

    nameTextField.delegate = self 
    saveButton.layer.cornerRadius = 3 
    if let user = self.user { 
     usernameLabel.text = user.username 
     if let name = user["name"] as? String { 
      nameTextField.text = name 
     } 
    } else { 
     dismissViewControllerAnimated(true, completion: nil) 
    } 
} 

@IBAction func didTapSaveButton(sender: AnyObject) { 
    if let user = self.user { 
     if nameTextField.text != "" { 
      user["name"] = nameTextField.text 
      user.saveEventually() 
      alertDismiss("Success", message: "New settings saved") 
     } else { 
     } 
    } 
} 

@IBAction func didTapLogOut(sender: AnyObject) { 
    PFUser.logOutInBackgroundWithBlock { error in 

     self.performSegueWithIdentifier("showLoginView", sender: self) 
    } 
} 

func checkSetting(user: PFUser, settingName : String) -> Bool { 
    if let value = user[settingName] as? Bool { 
     return value 
    } 
    return false 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

override func viewWillAppear(animated: Bool) { 
    self.nameTextField.text = PFUser.currentUser()?["name"] as? String 
    self.usernameLabel.text = PFUser.currentUser()?.username 
} 

func textFieldShouldReturn(textField: UITextField) -> Bool { 
    self.view.endEditing(true) 
    return false 
} 
} 
+0

Каковы детали аварии? – Paulw11

+0

Ничего не появляется в консоли. Я установил точку останова и ее на user.saveInBackground() – m1234

+0

Создал ли новый пользовательский объект? В противном случае вы пытаетесь изменить имя существующего пользователя. – Paulw11

ответ

0

Когда вы имеете дело с PFUsers, чтобы избежать аварий, нужно сделать это с помощью облачного кода и не забудьте включить MasterKey. Еще одна вещь, которую я заметил, - это ваш контроллер управления, который вы используете user.saveEventually(), а затем alertDismiss("Success", message: "New settings saved"), что совершенно неверно, потому что вы даете пользователю ложную информацию в соответствии с parse saveEventually запускается когда-то в будущем, и у него нет блока завершения, поэтому в в действительности вы просто обманываете пользователя, полагая, что сохранение было успешным.

Смежные вопросы