我得到了一个对象数组,例如: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];
}
}
希望它会帮助您。
// 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...");
}
显然,新数据将被添加很多次,因为这就是您编写的代码正在尝试做的事情。您可能还会遇到问题,因为在运行快速迭代器时不应修改数组。
NSDictionary是一个更好的数据结构。您可能需要NSInteger和BOOL作为“ idUser”和“ active”成员。
您需要在另一个循环中对照所有用户检查该用户。创建另一个功能
-(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];
}