为当前用户调用Parse Cloud Function

我试图在parsing中运行一些云function,以及我在Stackoverflow上find的问题( parsingiOS SDK:从Xcode调用云function )。 这里是我想要在我的应用程序中调用的函数:

var moment = require("moment"); Parse.Cloud.define("registerActivity", function(request, response) { var user = request.user; user.set("lastActive", new Date()); user.save().then(function (user) { response.success(); }, function (error) { console.log(error); response.error(error); }); }); Parse.Cloud.define("getOnlineUsers", function(request, response) { var userQuery = new Parse.Query(Parse.User); var activeSince = moment().subtract("minutes", 2).toDate(); userQuery.greaterThan("lastActive", activeSince); userQuery.find().then(function (users) { response.success(users); }, function (error) { response.error(error); }); }); 

我想在我的一个视图控制器中的viewDidLoad中调用registerActivity函数。 这是我迄今为止。 我需要一些帮助来完成这个function:

 override func viewDidLoad() { super.viewDidLoad() let currentUser = PFUser.currentUser() PFCloud.callFunctionInBackground("registerActivity", withParameters: currentUser){ if (!error){ } } // Uncomment the following line to preserve selection between presentations // self.clearsSelectionOnViewWillAppear = false // Register cell classes self.collectionView.registerClass(UICollectionViewCell.self, forCellWithReuseIdentifier: reuseIdentifier) } 

我在“PFCloud”行中得到一个错误: PFUser is not identical to [NSOBject:Anyobject] 。 我怎样才能为当前用户调用这个registerActivity函数?

谢谢!

更新

在viewDidLoad中更新函数调用:

 PFCloud.callFunctionInBackground("registerActivty", withParameters: nil, block: nil) 

这导致一个例外:

 Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[1]' 

最后更新:这个解决了这个问题:

 PFCloud.callFunctionInBackground("registerActivity", withParameters: [:], target: nil, selector: "block:") 

谢谢您的帮助!

如果它已经login,则不需要给currentUser 。在服务器端, request.user将已经设置为正在发出请求的login用户。 在这种情况下,您可以使用空字典参数调用云function。

另一方面,你得到的错误是因为PFUser对象不能被传递给云function。 您可以将用户标识作为["id": currentUser.objectId]传递。 然后在服务器中,可以通过request.params.id来访问它,以通过id获取用户。 这是为了防止任何用户调用云function(即使没有login)。