【问题标题】:Why is my NSMutable not being populated correctly when inserting objects from another NSArray?为什么从另一个 NSArray 插入对象时我的 NSMutable 没有正确填充?
【发布时间】:2018-11-09 23:22:58
【问题描述】:

我有一个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 中的任务时,Parse 中的列如下所示:

[["参与者 1"],"参与者 2"]

但我想要这样:

["参与者 1","参与者 2"]

我尝试过的:

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

【问题讨论】:

    标签: ios objective-c parse-platform nsmutablearray


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多