首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >保存PFQuery结果时出错

保存PFQuery结果时出错
EN

Stack Overflow用户
提问于 2014-06-26 17:39:22
回答 1查看 173关注 0票数 0

我有一个带有按钮的Item ViewController来与项目所有者一起创建chatRoom。

代码语言:javascript
复制
-(void)createChatRoom
{

    PFQuery *queryForChatRoom = [PFQuery queryWithClassName:@"ChatRoom"];
    [queryForChatRoom whereKey:@"user1" equalTo:[PFUser currentUser]];
    [queryForChatRoom whereKey:@"user2" equalTo:self.Item.Owner];

    PFQuery *queryForChatRoomInverse = [PFQuery queryWithClassName:@"ChatRoom"];
    [queryForChatRoomInverse whereKey:@"user1" equalTo:self.Item.Owner];
    [queryForChatRoomInverse whereKey:@"user2" equalTo:[PFUser currentUser]];

    PFQuery *combinedChatRoomQuery = [PFQuery orQueryWithSubqueries:@[queryForChatRoom, queryForChatRoomInverse]];

    [combinedChatRoomQuery findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
        if ([objects count] == 0){

            PFChatRoom *ChatRoom = [PFChatRoom objectWithClassName:@"ChatRoom"];
            [ChatRoom setObject:[PFUser currentUser] forKey:@"user1"];
            [ChatRoom setObject:self.Item.Owner forKey:@"user2"];
            [ChatRoom saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
                [self performSegueWithIdentifier:@"ItemToChatSegue" sender:nil];
            }];
        }
    }];

}

当我按下按钮来执行这段代码时,在任何给定的运行中,在任何线程上都会发生错误。

代码语言:javascript
复制
[PFUser(Private) checkSaveParams]

我可以登录到控制台--我的PFUser currentUser和这个ViewController的Item.Owner --所以有一些对象可以使用。如果我在没有第二个用户的情况下尝试代码,实际上我可以保存到分析chatRoom对象,其中只附加了PFUser currentUser。

我需要做什么才能将非当前用户添加到这个chatRoom中?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-26 18:42:06

出于安全考虑,Parse不允许当前用户修改您的第二个用户。如果您希望能够为第二个用户进行更改,则需要使用云代码来绕过这个路障。

我以前遇到过很多这样的问题,每次我都被迫通过云代码来解决问题。

下面是我为在两个用户之间建立朋友关系而做的一个解决方法的例子:

代码语言:javascript
复制
[PFCloud callFunction:@"editUser" withParameters:@{@"userId": user.objectId}];

上面的代码语句在xcode中,并执行我添加到我的Cloud文件中的函数。

然后,下面是我的云代码文件的样子:

代码语言:javascript
复制
Parse.Cloud.define('editUser', function(request, response) {
    var userId = request.params.userId;

    var User = Parse.Object.extend('_User'),
        user = new User({ objectId: userId });

    var currentUser = request.user;

    var relation = user.relation("friendsRelation");
    relation.add(currentUser);

    Parse.Cloud.useMasterKey();
    user.save().then(function(user) {
        response.success(user);
    }, function(error) {
        response.error(error)
    });
});

上面的代码使用主键来保存对当前登录用户和传递给此函数的objectId的用户的更改。

代码详细信息:

代码语言:javascript
复制
var relation

这只是我创建的一个变量,用于保存以下函数返回的内容:

代码语言:javascript
复制
user.relation("friendsRelation");

在上面的函数中,"friendsRelation"是Parse中我的PFRelation键的名称。

现在,我们在变量relation中有了一个有效的关系对象包含,我们使用currentUser对象的一个参数来执行这个函数。

在那之后,剩下的就是保存一切。我不使用javascript进行编程,但是通过查看Parse文档并在它们的支持论坛上搜索,我仍然能够找到上面的解决方案。

如果您从上面获取我的模板,并根据实际使用的解析对象类型(例如ChatRoom )进行一些小的更改,那么您应该能够轻松地完成所需的任务。您只需跳过这些额外的循环,因为Parse不希望有人登录并以某种方式更改另一个用户的帐户,无论是他们自己的错误还是开发人员的错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24436917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档