解析 iOS SDK + 云代码:如何更新用户

Posted

技术标签:

【中文标题】解析 iOS SDK + 云代码:如何更新用户【英文标题】:Parse iOS SDK + Cloud Code: How to update user 【发布时间】: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.... 我相信这会返回用户对象。我不知道你是否可以这样做与其他专栏。不过,云代码文档中有很多关于此的内容。 【参考方案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.
  
);

);

【讨论】:

以上是关于解析 iOS SDK + 云代码:如何更新用户的主要内容,如果未能解决你的问题,请参考以下文章

对象没有方法“状态”iOS SDK 和解析云代码

如何使用 JavaScript SDK 更新解析平台中的用户类?

错误代码 100 适用于 iOS 的解析 SDK

iphone/ios sdk:如果应用程序更新,如何删除/清除用户文件

解析 iOS SDK:如何持久登录?

从 Cloud Code 向 iOS 设备发送有关进度的更新(解析)