使用 swift 将当前用户保存到解析关系
save current user to relation in parse with 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:
经过大量研究,我发现这个答案说我需要云代码。 这是唯一的方法还是有其他选择?有人可以提供云代码解决方案吗?
编辑 2:
我回答了我自己的问题。您将需要根据需要编辑云代码。对我帮助最大的是知道如何在云代码中查询用户 class 并在云代码中获取当前用户。
这是唯一的方法,我相信。
如果您还没有设置云代码环境,请按照本指南设置:https://parse.com/apps/quickstart#cloud_code/unix
然后你应该定义一个函数(设置后的代码将包含一个示例 "hello world" 函数,因此你可以从中复制定义)。对于关系修改,您应该参考他们的 JS api 文档 - https://parse.com/docs/js/api/symbols/Parse.Relation.html
(注意:为了使其正常工作,在您尝试修改用户之前它应该包含 Parse.Cloud.useMasterKey() 行)
实现您的功能并部署云代码后(parse deploy),在您的移动应用中使用PFCloud.callFunctionInBackground .
好吧,过了一会儿,我能够为我的场景找到解决方案。当一个用户接受另一个用户时,这应该适用于简单的关系。
首先是我的 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 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()
当我为乘客尝试相同的模式时,它没有添加关系
var relation = passenger.relationForKey("Friends")
relation.addObject(PFUser.currentUser()!.self as PFObject)
passenger.saveInBackground()
编辑 1:
经过大量研究,我发现这个答案说我需要云代码。 这是唯一的方法还是有其他选择?有人可以提供云代码解决方案吗?
编辑 2:
我回答了我自己的问题。您将需要根据需要编辑云代码。对我帮助最大的是知道如何在云代码中查询用户 class 并在云代码中获取当前用户。
这是唯一的方法,我相信。 如果您还没有设置云代码环境,请按照本指南设置:https://parse.com/apps/quickstart#cloud_code/unix
然后你应该定义一个函数(设置后的代码将包含一个示例 "hello world" 函数,因此你可以从中复制定义)。对于关系修改,您应该参考他们的 JS api 文档 - https://parse.com/docs/js/api/symbols/Parse.Relation.html
(注意:为了使其正常工作,在您尝试修改用户之前它应该包含 Parse.Cloud.useMasterKey() 行)
实现您的功能并部署云代码后(parse deploy),在您的移动应用中使用PFCloud.callFunctionInBackground .
好吧,过了一会儿,我能够为我的场景找到解决方案。当一个用户接受另一个用户时,这应该适用于简单的关系。
首先是我的 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 deploy
来更新 main.js