【问题标题】:Parse iOS SDK + Cloud Code: How to update user解析 iOS SDK + 云代码:如何更新用户
【发布时间】:2014-08-06 17:11:23
【问题描述】:

我对如何从云代码更新用户感到困惑。如果有人可以帮助我解决这个问题,我将不胜感激。

我将用于此示例的云代码是:

云代码

Parse.Cloud.define("like", function(request, response) {
    var userID = request.params.userID;

    var User = Parse.User();
    user = new User ({ objectId: userID });

    user.increment("likes");

    Parse.Cloud.useMasterKey();
    user.save().then(function(user) {
        response.success(user);
    }, function(error) {
        response.error(error)
    });

});

从 iOS 调用

[PFCloud callFunctionInBackground:@"like" withParameters:@{@"userID": self.selectedFriendID} block:^(id object, NSError *error) {

}];

问题

user = new User ({ objectId: userID });

1) 是上面代码中创建“全新”用户的“新”用户,还是在objectId 上“抓取”现有用户以便可以在user.save 上更新?

2) 如果后者是正确的,那么是否可以从objectId 列以外的列中“抓取”用户,或者从userID 列中抓取?

例如:

user = new User ({ userID : userID });

【问题讨论】:

  • 在云代码中检索用户的方法是 query.get(request.params.userID.... 我相信这会返回用户对象。我不知道你是否可以这样做与其他专栏。不过,云代码文档中有很多关于此的内容。

标签: javascript ios objective-c parse-platform parse-framework


【解决方案1】:

这一行:

user = new User ({ objectId: userID });

创建具有已知 ID 的对象的实例,它仅适用于 objectId。您对该对象所做的任何更改都会保留,但不会更改其他数据(例如,您不会不小心将其他列清空)。

如果您想通过电子邮件获取用户,则必须进行查询:

var userQuery = new Parse.Query(Parse.User);
userQuery.equalTo('email', userEmail);
userQuery.first().then(function(user) {
    if (user) {
        // do something with the user here
        user.set('new_col', 'new text');
        user.save().then(function() {
            response.success();
        });
    } else {
        // no match found, handle it or do response.error();
    }
});

// the above code is async, don't put anything out here and expect it to work!

【讨论】:

  • 感谢您的回复!我想我开始看到这里发生了什么。因此,userQuery.equalTo('email', userEmail); 正在通过用户的电子邮件获取特定用户,userQuery.first().then(function(user) 正在访问用户的第一列,即objectId。因此,在您的代码中的if (user) {} 下,我应该能够像theUser = new User ({objectId : userQuery.objectId }); 一样执行theUser.set('new_col', "new text"); 保存它,然后在我的数据浏览器中这个用户下会有一个字符串类型的新列new text ?对吗?
  • first() 函数用于获取第一行/记录,当您只期望最多返回一行时会更好。您将可以访问结果中的完整用户对象,并且可以直接开始设置值并保存它。
【解决方案2】:

在云代码中检索用户的方法是 query.get(request.params.userID.... 我相信这会返回用户对象。我不知道你是否可以对其他列执行此操作。那里但是,云代码文档中有很多关于此的内容。如果有帮助,这是我用于编辑用户的云代码功能:

Parse.Cloud.define("editUser", function(request, response) {
  //var GameScore = Parse.Object.extend("SchoolHappening");
  // Create a new instance of that class.
  //var gameScore = new GameScore();
Parse.Cloud.useMasterKey();

  var query = new Parse.Query(Parse.User);
query.get(request.params.myUser, {
  success: function(myUser) {
    // The object was retrieved successfully.
    myUser.set("cabinetPosition", request.params.myPosition);
    // Save the user.
      myUser.save(null, {
        success: function(myUser) {
          // The user was saved successfully.
          response.success("Successfully updated user.");
        },
        error: function(gameScore, error) {
          // The save failed.
          // error is a Parse.Error with an error code and description.
          response.error("Could not save changes to user.");
        }
      });

  },
  error: function(object, error) {
    // The object was not retrieved successfully.
    // error is a Parse.Error with an error code and description.
  }
});

});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-15
    • 2016-05-04
    • 2016-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多