从另一个NSArray插入对象时,为什么我的NSMutable无法正确填充?

时间:2018-11-09 23:22:58

标签: ios objective-c parse-platform nsmutablearray

我有一个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. 查询参与者类以获取特定的ObjectId
  3. 如果没有错误,则我们创建一个NSMutable array
  4. 如果Parse中没有参与者,则我们将当前用户插入为参与者。
  5. 否则,将所有参与者插入可变数组,并在数组末尾添加currentuser
  6. 然后将其再次上传到Parse

我的问题出在步骤5:

当我在else中执行任务时,“解析”中的列如下所示:

  

[[“”参与者1“],”参与者2“]

但是我想要这样:

  

[“参与者1”,“参与者2”]

我尝试过的事情:

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

2 个答案:

答案 0 :(得分:1)

很难确定,因为我看不到您的数据结构,但是您确定其中的值是

[[objects objectAtIndex:i]  valueForKey: @“Participants”]

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

答案 1 :(得分:0)

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

this.setState(
 {
   openA:true 
 }, 
 () => {
   this.setState({
     openB: false
   })
 } 
)

这使用NSArray* participants = [[objects objectAtIndex:i] valueForKey:@"Participants"] [newParticipantsArray addObjectsInArray:participants]; 的{​​{3}}方法将旧数组中的对象添加到新数组中。