Я понимаю, что это может быть дублированный вопрос, но когда я попытался, я не получаю измененные свойства. Я последовал за двумя ответами KVO + Array SO. Однако я по-прежнему не хватает некоторых бит, поскольку он не работает в моем случае.KVO на изменяемом массиве свойств настраиваемых объектов
user.h:
@interface User : NSObject
...
@property(nonatomic, assign) double latitude;
@property(nonatomic, assign) double longitude;
...
@end
SingletonClass.h:
@interface SingletonClass : NSObject
....
@property(nonatomic, readonly) NSMutableArray *remoteUsers;//Stores user objects
...
@end
SingletonClass.m
@implementation SingletonClass
for (int i = 0; i < _remoteUsers.count; i++) {
index = [NSIndexSet indexSetWithIndex:i];
User *rmtUser = _remoteUsers[i];
if ([rmtUser.roomJid isEqualToString:occupantJID.description]) {
[self willChange:NSKeyValueChangeReplacement valuesAtIndexes:index forKey:@"remoteUsers"];
rmtUser.latitude = user.latitude;
rmtUser.longitude = user.longitude;
[self didChange:NSKeyValueChangeReplacement valuesAtIndexes:index forKey:@"remoteUsers"];
isUserInList = YES;
break;
}
}
MainViewClass.h: Здесь я хочу обновить местоположение пользователя на карте ,
MainViewClass.m:
@implementation MainViewClass
....
[SingletonClass addObserver:self forKeyPath:@"remoteUsers" options:NSKeyValueObservingOptionNew context:nil];
....
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if([keyPath isEqualToString:@"remoteUsers"]) {
User *remoteUser = ((SingletonClass *)object).remoteUsers[0];
NSLog(@"THE LATITUDE OBSERVED IS %f", remoteUser.latitude);
NSLog(@"THE LONGITUDE OBSERVED IS %f", remoteUser.longitude);
}
}
Здесь я получаю законченный объект пользователя, а не измененные/обновленные свойства. Я что-то делаю неправильно?
Кажется, что это работает, проверьте документацию KVO. –