我试图在Parse中运行一些云函数,以及我在Stackoverflow(Parse iOS SDK: Calling Cloud Functions From Xcode)上找到的问题。以下是我想在我的应用中调用的功能:
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函数。这是我到目前为止所拥有的。我需要一些帮助来完成这个功能:
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:")
感谢您的帮助!
答案 0 :(得分:2)
如果已经登录,则无需提供currentUser
。在服务器端request.user
将已设置为发出请求的登录用户。在这种情况下,您可以使用空字典参数调用云函数。
另一方面,您获得的错误是因为PFUser对象无法传递给云功能。您可以将用户ID传递为["id": currentUser.objectId]
。然后,在服务器中,您可以request.params.id
访问它,以便id
获取用户。这是为了您想为任何用户调用云功能(即使它没有登录)。