为什么在从另一个 NSArray 插入对象时我的 NSMutable 没有被正确填充?

Why is my NSMutable not being populated correctly when inserting objects from another NSArray?

我有一个 PFQuery 获取特定事件的当前参与者:

PFQuery *getcurrentparticipants = [PFQuery queryWithClassName:@"Event"];

[getcurrentparticipants selectKeys:@[@"Participants"]];
[getcurrentparticipants whereKey:@"objectId" equalTo:ObjectID];
[getcurrentparticipants findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
    if (!error) {

        NSMutableArray *newParticipantsArray = [[NSMutableArray alloc]init];

        if([objects[0] valueForKey:@"Participants"] == nil){ // If object retrieved in objects is null. If there are 0 participants

            [newParticipantsArray addObject:PFUser.currentUser.username];
            PFQuery *query = [PFQuery queryWithClassName:@"Event"];
            [query getObjectInBackgroundWithId:self.ObjectID
                                         block:^(PFObject *Event, NSError *error) {
                                             Event[@"Participants"] = newParticipantsArray;
                                             [Event incrementKey:@"Vacants" byAmount:[NSNumber numberWithInt:-1]];
                                             [Event saveInBackground];
                                         }];

        }else{ // STEP 5

            for(int i=0;i<objects.count;i++) {

                [newParticipantsArray addObject:[[objects objectAtIndex:i] valueForKey:@"Participants"]];


            }
            [newParticipantsArray addObject:PFUser.currentUser.username];

            NSLog(@"Part to upload %@", newParticipantsArray);

            PFQuery *query = [PFQuery queryWithClassName:@"Event"];
            [query getObjectInBackgroundWithId:self.ObjectID
                                         block:^(PFObject *Event, NSError *error) {
                                             Event[@"Participants"] = newParticipantsArray;
                                             [Event incrementKey:@"Vacants" byAmount:[NSNumber numberWithInt:-1]];
                                             [Event saveInBackground];
                                         }];

        }
    } else { 
        // Log details of the failure
        NSLog(@"Error: %@ %@", error, [error userInfo]);
    }
}];

方法是这样工作的:

  1. 创建一个PFQuery对象
  2. 向参与者 Class 查询特定 ObjectId
  3. 如果没有错误,那么我们创建一个NSMutable array
  4. 如果没有参与者在 Parse 中,那么我们将当前用户插入为参与者。
  5. 否则,将所有参与者插入可变数组并在数组末尾添加 currentuser
  6. 然后再上传到Parse

我的问题在第5步:

当我执行 else 中的任务时,Parse 中的列如下所示:

[["Participant 1"],"Participant 2"]

但我想要这样:

["Participant 1","Participant 2"]

我试过的:

我试过像这样放置数组。 [newParticipantsArray addObject:[[objects objectAtIndex:i] valueForKey:@"Participants"]]; 和类似的组合,当然没有运气。

很难确定,因为我看不到你的数据结构,但你确定

中保存的值吗
[[objects objectAtIndex:i]  valueForKey: @“Participants”]

是单个用户而不是用户数组吗?复数键“参与者”似乎暗示它是一组用户,这也可以解释您得到的结果。

如果实际上为 "Participants" 键返回的值是一个数组,您可以通过执行以下操作将其中的对象添加到可变数组中:

NSArray* participants  =  [[objects objectAtIndex:i] valueForKey:@"Participants"]
[newParticipantsArray addObjectsInArray:participants];

这使用 NSMutableArrayaddObjectsInArray: 方法将旧数组中的对象添加到新数组中。