我得到了一个对象数组,例如:Obj1 = {idUser:1,lat:19.0000,lng:-99.0000,active:true}。这是为了监视某些用户,因此,如果一个用户离开,它将其属性活动值从true更改为false,而我必须将其从数组中删除,或者如果某个用户更改其位置,则仅属性坐标值会更改。至此,我已经实现了这一点,那就是当未注册的用户到达时,我需要将其添加到数组中,但是它会将用户添加的次数是idUser与现有用户不匹配的次数,因此我只需要添加一次。
这是我使用的代码示例:
User *u3 = [[User alloc] initWithIdUser:@3 lat:19.417210 lng:-99.163552 active:@"true"];
for (User *u in users) {
if ([u3.idUser isEqualToValue:u.idUser] && [u3.active isEqualToString:@"false"]) {
NSLog(@"User leaves");
[users removeObject:u];
} else if ([u3.idUser isEqualToValue:u.idUser] && [u3.active isEqualToString:@"true"]) {
NSLog(@"User changed location");
[u setCoordinate:u3.coordinate];
} else if (![u3.idUser isEqualToValue:u.idUser] && [u3.active isEqualToString:@"true"]) {
NSLog(@"New user...");
[users arrayByAddingObject:u3];
}
}
答案 0 :(得分:2)
希望它会对您有所帮助。
// array of all active users id NSArray* idUsersArray = [users valueForKey:@"idUser"];
// check if user already exist or not
if ([idUsersArray containsObject:u3.idUser]) {
// get index of user
NSUInteger index = [idUsersArray indexOfObject:u3.idUser];
if ([u3.active isEqualToString:@"false"]) {
[users removeObjectAtIndex:index];
NSLog(@"User leaves");
} else {
User* u = [users objectAtIndex:index];
[u setCoordinate:u3.coordinate];
NSLog(@"User changed location");
}
} else {
// add user into users array
[users arrayByAddingObject:u3];
NSLog(@"New user...");
}
答案 1 :(得分:1)
很显然,新数据将被添加很多次,因为那是您编写的代码试图执行的操作。您可能还会遇到问题,因为在运行快速迭代器时不应修改数组。
NSDictionary是一个更好的数据结构。您可能希望将NSInteger和BOOL用作“ idUser”和“ active”成员。
答案 2 :(得分:-1)
您需要对照另一个循环中的所有用户检查该用户。创建另一个功能
-(BOOL)canAddNewUser:(User*)user {
for (User *u in users) {
if ((u.idUser isEqualToValue:user.idUser)&&([user.active isEqualToString:@"true"])) {
return YES;
}
}
return NO;
}
然后您的代码变为:
User *u3 = [[User alloc] initWithIdUser:@3 lat:19.417210 lng:-99.163552 active:@"true"];
for (User *u in users) {
if ([u3.idUser isEqualToValue:u.idUser] && [u3.active isEqualToString:@"false"]) {
NSLog(@"User leaves");
[users removeObject:u];
} else if ([u3.idUser isEqualToValue:u.idUser] && [u3.active isEqualToString:@"true"]) {
NSLog(@"User changed location");
[u setCoordinate:u3.coordinate];
}
}
if ([self canAddNewUser:u3]) {
NSLog(@"New user...");
[users arrayByAddingObject:u3];
}