Ios 使用swift将当前用户保存到解析中的关系

Ios 使用swift将当前用户保存到解析中的关系,ios,xcode,swift,parse-platform,pfrelation,Ios,Xcode,Swift,Parse Platform,Pfrelation,我有一个系统,当当前用户接受请求时,我的应用程序会在向当前用户发送请求的用户之间添加一个关系 但是,我还希望将当前用户添加到另一个用户的关系中,这样不仅当前用户有关系 我的代码对当前用户有效,但对其他用户无效 //i use this pattern to add the requester to a friends relation to the current user var relation = PFUser.currentUser()!.relationForKey(

我有一个系统,当当前用户接受请求时,我的应用程序会在向当前用户发送请求的用户之间添加一个关系

但是,我还希望将当前用户添加到另一个用户的关系中,这样不仅当前用户有关系

我的代码对当前用户有效,但对其他用户无效

    //i use this pattern to add the requester to a friends relation to the current user 
    var relation = PFUser.currentUser()!.relationForKey("Friends")
    relation.addObject(passenger as PFObject)
    PFUser.currentUser()!.saveInBackground()
当我为乘客尝试相同的模式时,它不会添加关系

      var relation = passenger.relationForKey("Friends")
      relation.addObject(PFUser.currentUser()!.self as PFObject)
      passenger.saveInBackground()
编辑1:

经过大量研究,我发现这个答案说我需要云代码。这是唯一的办法还是有其他办法?有人能提供云代码解决方案吗

编辑2:


我回答了我自己的问题。您需要根据需要编辑云代码。对我最大的帮助是知道如何在云代码中查询用户类,并在云代码中获取当前用户。

这是唯一的方法,好吧。 如果尚未设置云代码环境,请按照本指南进行设置:

然后您应该定义一个函数(设置后的代码将包含一个示例“hello world”函数,因此您可以从中复制定义)。有关关系修改,请参考他们的JS api文档-

(注意:为了让它工作,在您尝试修改用户之前,它应该包含Parse.Cloud.useMasterKey()行)


在您的功能实现并部署云代码后(parsedeploy),请在您的移动应用程序中使用PFCloud.callfunctionbackground。

这是唯一的方法,好的。 如果尚未设置云代码环境,请按照本指南进行设置:

然后您应该定义一个函数(设置后的代码将包含一个示例“hello world”函数,因此您可以从中复制定义)。有关关系修改,请参考他们的JS api文档-

(注意:为了让它工作,在您尝试修改用户之前,它应该包含Parse.Cloud.useMasterKey()行)


在您的功能实现并部署云代码后(解析部署),在您的移动应用程序中使用PFCloud.callfunctionbackground。

好的,所以过了一会儿,我就能够为我的场景找到解决方案了。当一个用户接受另一个用户时,这应该适用于简单的关系

    //i use this pattern to add the requester to a friends relation to the current user 
    var relation = PFUser.currentUser()!.relationForKey("Friends")
    relation.addObject(passenger as PFObject)
    PFUser.currentUser()!.saveInBackground()
首先是我的swift密码。需要注意的是,我创建了一个函数,将PFUser作为参数。我这样做是为了重构一个更大的函数。此用户是我们希望在云代码中将当前用户保存到的用户

func createRelation(otherUser: PFUser)
{

    let fromUser: PFUser = otherUser
    let params = NSMutableDictionary()
    params.setObject(fromUser.objectId!, forKey: "Friends")


    PFCloud.callFunctionInBackground("addFriendToFriendsRelation", withParameters: params as [NSObject : AnyObject] ) {
        (object:AnyObject?, error: NSError?) -> Void in

        //add the person who sent the request as a friend of the current user
        let friendsRelation: PFRelation = self.currentUser!.relationForKey("Friends")
        friendsRelation.addObject(fromUser)
        self.currentUser!.saveInBackgroundWithBlock({
            (succeeded: Bool, error: NSError?) -> Void in

            if succeeded {
                println("Relation added to the current user")


            } else {

                println("Handle error in adding relation to current user ")
            }
        })
    }

}
现在来看解析云代码

    Parse.Cloud.define("addFriendToFriendsRelation", function(request, response) {

    Parse.Cloud.useMasterKey();
    //get the friend requestId from params
    var friendRequestId = request.params.Friends;
    var query = new Parse.Query(Parse.User);

    //get the friend request object
    query.get(friendRequestId, {
        success: function(friendRequest) {

            //get the user the request was from
            var fromUser = friendRequest;
            //get the user the request is to
            var toUser = Parse.User.current() ;

            var relation = fromUser.relation("Friends");
            //add the user the request was to (the accepting user) to the fromUsers friends
            relation.add(toUser);

            //save the fromUser
            fromUser.save(null, {

                success: function() {

                     response.success("saved relation and updated friendRequest");

                },

                error: function(error) {

                response.error(error);

                }

            });

        },

        error: function(error) {

            response.error(error);
        }

    });

});

此外,请确保使用parse目录中的命令
parse deploy
更新main.js

好的,这样过了一会儿,我就能够为我的场景找到解决方案了。当一个用户接受另一个用户时,这应该适用于简单的关系

    //i use this pattern to add the requester to a friends relation to the current user 
    var relation = PFUser.currentUser()!.relationForKey("Friends")
    relation.addObject(passenger as PFObject)
    PFUser.currentUser()!.saveInBackground()
首先是我的swift密码。需要注意的是,我创建了一个函数,将PFUser作为参数。我这样做是为了重构一个更大的函数。此用户是我们希望在云代码中将当前用户保存到的用户

func createRelation(otherUser: PFUser)
{

    let fromUser: PFUser = otherUser
    let params = NSMutableDictionary()
    params.setObject(fromUser.objectId!, forKey: "Friends")


    PFCloud.callFunctionInBackground("addFriendToFriendsRelation", withParameters: params as [NSObject : AnyObject] ) {
        (object:AnyObject?, error: NSError?) -> Void in

        //add the person who sent the request as a friend of the current user
        let friendsRelation: PFRelation = self.currentUser!.relationForKey("Friends")
        friendsRelation.addObject(fromUser)
        self.currentUser!.saveInBackgroundWithBlock({
            (succeeded: Bool, error: NSError?) -> Void in

            if succeeded {
                println("Relation added to the current user")


            } else {

                println("Handle error in adding relation to current user ")
            }
        })
    }

}
现在来看解析云代码

    Parse.Cloud.define("addFriendToFriendsRelation", function(request, response) {

    Parse.Cloud.useMasterKey();
    //get the friend requestId from params
    var friendRequestId = request.params.Friends;
    var query = new Parse.Query(Parse.User);

    //get the friend request object
    query.get(friendRequestId, {
        success: function(friendRequest) {

            //get the user the request was from
            var fromUser = friendRequest;
            //get the user the request is to
            var toUser = Parse.User.current() ;

            var relation = fromUser.relation("Friends");
            //add the user the request was to (the accepting user) to the fromUsers friends
            relation.add(toUser);

            //save the fromUser
            fromUser.save(null, {

                success: function() {

                     response.success("saved relation and updated friendRequest");

                },

                error: function(error) {

                response.error(error);

                }

            });

        },

        error: function(error) {

            response.error(error);
        }

    });

});

此外,请确保使用parse目录中的命令
parse deploy
更新main.js

我复制并粘贴了这段代码,但得到了错误:2015-09-16 18:51:24.286 Gestern[6919:806406][error]:ReferenceError:e.query.get.success(main.js:60:22)的e.n.value(parse.js:13:7510)中未定义父项在e。(Parse.js:12:27827)在e.s(Parse.js:12:26759)在e.n.value(Parse.js:12:26178)在e.s(Parse.js:12:26887)在e.n.value(Parse.js:12:26178)在e。(Parse.js:12:26831)在e.s(Parse.js:12:26759)在Parse.js:12:27145(代码:141,版本:1.7.5)有什么问题?我没有JavaScript方面的经验…@NickPodratz请确保您确实安装了parse cloud,您还需要了解您是如何规划数据的,并相应地使用代码,我有一个非常具体的场景,但我需要从swift传递ID,另外需要注意的是parse不会为您创建关系列,因此,在你的用户类中,你需要添加这一点。谢谢你的建议,我已经修改过了。我检查了一切是否都设置好了,然后学习了一些JavaScript,以便根据我的目的正确地构造代码。但经过进一步研究,我得出结论,这似乎是Parse SDK中的一个bug,因为另一个用户报告了类似的问题。我复制并粘贴了这段代码,但得到的错误是:2015-09-16 18:51:24.286 Gestern[6919:806406][error]:ReferenceError:Parse.js:13:7510在e.query.get.success(main.js:60:22)在e。(Parse.js:12:27827)在e.s(Parse.js:12:26759)在e.n.value(Parse.js:12:26178)在e.s(Parse.js:12:26887)在e.n.value(Parse.js:12:26178)在e。(Parse.js:12:26831)在e.s(Parse.js:12:26759)在Parse.js:12:27145(代码:141,版本:1.7.5)有什么问题?我没有JavaScript方面的经验…@NickPodratz请确保您确实安装了parse cloud,您还需要了解您是如何规划数据的,并相应地使用代码,我有一个非常具体的场景,但我需要从swift传递ID,另外需要注意的是parse不会为您创建关系列,因此,在你的用户类中,你需要添加这一点。谢谢你的建议,我已经修改过了。我检查了一切是否都设置好了,然后学习了一些JavaScript,以便根据我的目的正确地构造代码。但经过进一步研究,我得出结论,这似乎是Parse SDK中的一个bug,因为另一个用户报告了类似的问题。