сохранить текущего пользователя в отношении при разборе с помощью swift

У меня есть система, в которой, когда текущий пользователь принимает запрос, мое приложение добавляет связь между пользователем, отправившим запрос, текущему пользователю.

Однако я также хочу, чтобы текущий пользователь был добавлен в отношение другого пользователя, чтобы не только текущий пользователь имел отношение.

Мой код для текущего пользователя работает, но не для другого пользователя.

    //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:

После долгих исследований я нашел этот ответ, в котором говорится, что мне нужен облачный код. https://stackoverflow.com/a/23305056/3822504 Это единственный способ или есть альтернатива? Может ли кто-нибудь предоставить решение для облачного кода?

Редактировать 2:

Я ответил на свой вопрос. Вам нужно будет отредактировать облачный код в соответствии с вашими потребностями. Больше всего мне помогло знание того, как запросить класс пользователя в облачном коде и получить текущего пользователя в облачном коде.


person kareem    schedule 06.09.2015    source источник


Ответы (2)


Это единственный путь, афаик. Следуйте этому руководству, чтобы настроить среду облачного кода, если вы еще этого не сделали: https://parse.com/apps/quickstart#cloud_code/unix

Затем вы должны определить функцию (код после настройки будет содержать образец функции «hello world», так что вы можете скопировать определение из него). Для модификации отношения вы должны обратиться к их документам API JS - https://parse.com/docs/js/api/symbols/Parse.Relation.html

(Примечание: чтобы это работало, оно должно содержать строку Parse.Cloud.useMasterKey(), прежде чем вы попытаетесь изменить пользователей)

После реализации вашей функции и развертывания облачного кода (parse deploy) используйте PFCloud.callFunctionInBackground в своем мобильном приложении.

person alchemiss    schedule 06.09.2015

Итак, через некоторое время я смог найти решение для своего сценария. Это должно работать для простых отношений, когда пользователь принимает другого пользователя.

Первый мой быстрый код. Важно отметить, что я создал функцию, которая принимает 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 deploy в каталоге синтаксического анализа для обновления main.js.

person kareem    schedule 07.09.2015
comment
Я скопировал и вставил этот код, но получаю сообщение об ошибке: 2015-09-16 18:51:24.286 Gestern[6919:806406] [Ошибка]: ReferenceError: parent не определен в envalue (Parse.js:13:7510) в e.query.get.success (main.js:60:22) в e.‹anonymous› (Parse.js:12:27827) в es (Parse.js:12:26759) в e.n.value (Parse.js :12:26178) в es (Parse.js:12:26887) в e.n.value (Parse.js:12:26178) в e.‹anonymous› (Parse.js:12:26831) в es (Parse.js: 12:26759) в Parse.js:12:27145 (Код: 141, Версия: 1.7.5) В чем может быть проблема? У меня нет опыта работы с JavaScript... - person Nick Podratz; 16.09.2015
comment
@NickPodratz убедитесь, что у вас действительно установлено облако синтаксического анализа, также вам нужно понять, как вы спланировали свои данные, и соответствующим образом использовать код, у меня очень специфический сценарий, но я передаю идентификаторы из swift, которые мне нужны, еще одна вещь отметить, что синтаксический анализ не создаст для вас столбец отношения, поэтому в вашем пользовательском классе вам нужно будет добавить это - person kareem; 16.09.2015
comment
Спасибо за совет, я его уже адаптировал. Я проверил, все ли настроено, и после этого немного изучил JavaScript, чтобы правильно структурировать код для моей цели. Но после дальнейших исследований я пришел к выводу, что это похоже на ошибку в Parse SDK, так как другой пользователь сообщил о похожей проблеме. groups.google.com/forum/#!topic/parse-developers /-wmVSquWrVI. - person Nick Podratz; 16.09.2015