У меня есть целый ряд моделей, которые следят за изменениями. Когда запускается сеттер, вызывается наблюдатель в модели, и в этой модели я вызываю веб-сервер и обновляю информацию на веб-сервере, чтобы он правильно располагал данными, которые он должен.
Тем не менее, при моем обращении к веб-серверу я могу получить сообщение об ошибке для чего-либо от разрыва соединения, сброса сервера и т. Д. До сервера, говорящего, что обновление не разрешено (например, какой-то другой параметр, измененный другим пользователем, предотвратил обновление ).
О, радости отключенного хранилища данных ...
Можно ли каким-либо образом обновить self
(т.е. модель) без повторного запуска действия KVO?
Я мог бы отключить наблюдателя, когда получу ответ, но другое пользовательское действие с тем же объектом возможно во время выполнения запроса фонового сервера. Это тогда прервет другой вызов.
См. Пост здесь для объяснения того, что я пытался сделать, чтобы в первую очередь произошло наблюдение, и пример кода полной модели.
Часть, где я делаю вызов, будет находиться в наблюдателе следующим образом:
-(void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context {
if ([keyPath isEqual:@"firstName"]) {
if !([serverCall value:[change objectForKey:NSKeyValueChangeNewKey]
forKey:@"firstName"]) {
// Notify the user of the problem and somehow do a
// [self setFirstName:[change objectForKey:NSKeyValueChangeOldKey]]
// without firing off a KVO which would only loop this process
}
}
if ([keyPath isEqual:@"lastName"]) {
// Do whatever I need to do
}
}
Вы, ребята, всегда, кажется, даете хороший совет, и я всегда благодарен за любые ваши предложения.