为什么在从另一个 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]);
}
}];
方法是这样工作的:
- 创建一个
PFQuery
对象
- 向参与者 Class 查询特定
ObjectId
- 如果没有错误,那么我们创建一个
NSMutable array
- 如果没有参与者在 Parse 中,那么我们将当前用户插入为参与者。
- 否则,将所有参与者插入可变数组并在数组末尾添加
currentuser
。
- 然后再上传到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];
这使用 NSMutableArray
的 addObjectsInArray:
方法将旧数组中的对象添加到新数组中。
我有一个 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]);
}
}];
方法是这样工作的:
- 创建一个
PFQuery
对象 - 向参与者 Class 查询特定
ObjectId
- 如果没有错误,那么我们创建一个
NSMutable array
- 如果没有参与者在 Parse 中,那么我们将当前用户插入为参与者。
- 否则,将所有参与者插入可变数组并在数组末尾添加
currentuser
。 - 然后再上传到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];
这使用 NSMutableArray
的 addObjectsInArray:
方法将旧数组中的对象添加到新数组中。