尝试保存用户信息以使用swift解析备用Syncano

时间:2016-04-03 14:24:16

标签: swift parse-platform syncano

我非常坚持这一点,因为Syncano文档并不擅长解释...... 我正在使用Syncano后端(R.I.P Parse)构建一个简单的聊天应用程序,我想要做的就是保存名字,姓氏和他们可以选择的唯一用户名。我已经设法将用户连接到服务器,并且可以在我的类列表中看到它们,但是没有显示用户的附加信息。我有一个名为Signup View Controller的视图控制器,它处理与所有连接的标签和按钮的所有交互。值得一提的是这是我的第一个应用程序,我是编程的初学者,所以我需要有一点经验的人给我一些关于它不保存用户姓名和唯一用户名的指示。

这是按下时我想将数据发送到Syncano的方式:

class SignupViewController: UIViewController {

    var delegate : LoginDelegate?
    var @IBAction func signupPressed(sender: AnyObject) {
    var huddleusernameText = usernameTextField.text
    var firstNameText = firstNameTextField.text
    var lastNameText = lastNameTextField.text
    var passwordText = passwordTextField.text
    var repeatPasswordText = repeatPasswordTextField.text
    var emailText = emailTextField.text

func registerUser(username: String, password: String, first_name: String, last_name: String, email: String)
    {
        SCUser.registerWithUsername(username, password: password)
        { error in
            //handle user registration
            if (error != nil)
            {
            //handle error
            print("Sign Up, error: \(error)")
            }
        }
}

self.signUp(self.getUsername()!, password: self.getPassword()!, finished:
        { error in
    if (error != nil) {
                //handle error
                print("Sign Up, error: \(error)")
    } else
    {
        SCUser.currentUser()
        self.addNewUser()
        self.delegate?.didSignUp()

    }
})

func signUp(username: String, password: String, finished: (NSError!) -> ()) {
    SCUser.registerWithUsername(username, password: password) { error in
        finished(error)
    }
}

// Syncano docs mentions using this, but I'm not sure how to use this   piece of code to store user data...
class MyUserProfile : SCUserProfile {
    var avatar : SCFile? = nil;
    var first_name = ""
    var last_name = ""
    var email = ""
    var username = ""
}

这是额外的东西

func addNewUser() {
    let user = MyUserProfile()
    user.first_name = firstNameTextField.text!
    user.last_name = lastNameTextField.text!
    user.email = emailTextField.text!
    user.huddle_username = usernameTextField.text!
    user.saveWithCompletionBlock { error in
        //Handle error
    }
}

如果我遇到任何新的解决方案,我会更新这个问题,但就目前而言,就是这样。

1 个答案:

答案 0 :(得分:2)

您可以在文档中找到更多详细信息:http://docs.syncano.io/docs/ios#section-subclassing-user-and-user-profile,它介绍了您自己的用户配置文件子类,以使用自定义字段(如名字和姓氏)。

我知道您已拥有自己的自定义用户个人资料,但我觉得如果我从头开始解释它会更好。

首先,您需要编辑user_profile类,最简单的方法是Dashboard,并添加first_name和last_name属性。

接下来,创建自己的自定义user_profile类:

import syncano_ios

class MyUserProfile: SCUserProfile {
    var first_name = ""
    var last_name = ""
}

在使用之前,请在应用中的某个位置注册(例如,在主要课程的viewDidLoad,或使用func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool方法在AppDelegate中注册)

SCUser.registerClassWithProfileClass(MyUserProfile.self)

您现在可以编写将您的姓名保存到用户个人资料中的代码:

func saveName() {
    guard let profile = SCUser.currentUser().profile as? MyUserProfile else {
        return
    }
    profile.first_name = "Firstname" //get it from e.g. text field
    profile.last_name = "Lastname" //get it from e.g. text field
    profile.saveWithCompletionBlock { error in
    }
}

现在,修改您的代码。请致电addNewUser方法:

,而不是致电saveName
self.signUp(self.getUsername()!, password: self.getPassword()!, finished:
        { error in
    if (error != nil) {
                //handle error
                print("Sign Up, error: \(error)")
    } else
    {
        self.saveName()
        self.delegate?.didSignUp()

    }
})

此代码与您发布的代码之间的主要区别在于您尝试创建新的user_profile对象 - 这是不可能的。相反,每次创建新用户时,Syncano都会添加一个新的user_profile。 所以你需要做的就是获取新用户的user_profile,并通过添加名字和姓氏来修改它。