为当前用户调用解析云功能

时间:2014-08-08 02:18:27

标签: ios swift parse-platform

我试图在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:")

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

如果已经登录,则无需提供currentUser。在服务器端request.user将已设置为发出请求的登录用户。在这种情况下,您可以使用空字典参数调用云函数。

另一方面,您获得的错误是因为PFUser对象无法传递给云功能。您可以将用户ID传递为["id": currentUser.objectId]。然后,在服务器中,您可以request.params.id访问它,以便id获取用户。这是为了您想为任何用户调用云功能(即使它没有登录)。