我试图将订阅添加到特定PFUser的所有PFInstallation中(对于一个人在iPhone iPad上使用相同登录名的情况,等等)。我还有所有使用该应用程序的所有Facebook朋友的表格视图。在选择行中的朋友时,我希望它获取我的objectId并查询所有PFInstallations以获得所有PFInstallations的数组,其中键usersObjectId匹配PFUser objectId。然后,我可以为每个PFInstallation的通道添加一个值。我有:

FriendArray *job = self.jobsArray[indexPath.row];
    PFQuery *query = [PFUser query];
//job.facebookid is the Facebook id for that particular user
//each PFUser has a fbId and for those who logged in with Facebook, their Facebook ID is stored here
    [query whereKey:@"fbId" equalTo:job.facebookid];
    PFUser *user = (PFUser *)[query getFirstObject];
//This gives me the PFUser whose fbId value matches the Facebook id for the row that was selected
    NSString *subscription = [@"User_" stringByAppendingString:user.objectId];
    PFUser *me = [PFUser currentUser];

    PFQuery *pushQuery = [PFInstallation query];
//Trying to get all PFInstallations that match the current user's usersObjectId, so I can add the value to each channel
    [pushQuery whereKey:@"usersObjectId" equalTo:[me objectId]];
    PFInstallation *allInstallations = (PFInstallation *)[pushQuery findObjects];
    [allInstallations addUniqueObject:subscription forKey:@"channels"];


它告诉我,不能直接查询PFInstallation。我该如何在云端代码中做同样的事情?

最佳答案

好的,经过数小时的工作,我终于弄清楚了,并认为可以发布解决方案。如果要编辑某个类型的所有PFInstallation条目(我总是通过将PFUser objectId放在PFInstallation上作为新值来执行此操作),那么就可以进行。

对于云代码,请使用:

Parse.Cloud.define("subscribingAll", function(request, response) {
      Parse.Cloud.useMasterKey();

    var usersObjectId = request.params.usersObjectId;
      var newSubscription = request.params.newSubscription;


  var pushQuery = new Parse.Query(Parse.Installation);
  pushQuery.equalTo("usersObjectId", usersObjectId);

     pushQuery.find({
    success: function(results) {

      response.success(results);
    },
    error: function() {
      response.error("failed");
    }
  });
});


然后,在您的应用程序上,您需要一个PFCloud调用来处理所有这一切。

[PFCloud callFunctionInBackground:@"subscribingAll"
                       withParameters:@{@"usersObjectId": [me objectId], @"newSubscription": subscription}
                                block:^(NSArray *theCount, NSError *error) {
                                    if (!error) {
                                        int i;
                                        for (i = 0; i < [theCount count]; i++) {
                                            PFInstallation *change = [theCount objectAtIndex:i];
                                            [change addUniqueObject:subscription forKey:@"channels"];
                                            [change saveInBackground];
                                        }

                                    }
                                }];


云代码返回一个数组,其中每个对象都是来自PFInstallation的与查询匹配的数据。您需要通过循环来运行它,并将每个objectAtIndex设置为PFInstallation。从那里开始,只需执行一个简单的addUniqueObject,瞧,就完成了。

在我的情况下,登录时,它将objectId复制到我为PFInstallation创建的名为usersObjectId的键中。因此,我在iPhone上登录,然后在iPad上再次登录,我有2个不同的PFInstallation,但是两者都具有相同的usersObjectId。运行所有这些代码,使我可以隔离所有自己的装置并进行编辑,尤其是与我用来订阅Facebook朋友的代码一起使用时,以便我在他们发布内容时得到通知。

10-07 23:41