我有一大堆模型可以監視自己的變化。當設置者被觸發時,模型中的觀察者被調用,並且在該模型中,我調用Web服務器並更新Web服務器中的信息,以便它正確地具有它應該的數據。當從模型設置器發起KVO時,防止重新輸入observeValueForKeypath
但是,在我對Web服務器的調用中,我可以從連接被丟棄,服務器重置等到服務器返回一個錯誤,告訴服務器不允許更新(例如,其他用戶更改的某些其他參數阻止更新)。
哦斷開連接的數據存儲的樂趣...
有沒有辦法,我可以沒有它重新觸發一個志願行動更新self
(即模型)什麼辦法?
當我收回響應時,我可以關閉觀察者,但在執行後臺服務器請求時可以對同一對象執行另一個用戶操作。然後這將打破另一個電話。
請參閱文章here瞭解我正在嘗試如何讓觀察結果首先發生,以及完整模型的代碼示例。
在那裏我正在通話將是觀察者如下部分:
-(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
}
}
你們似乎總是對一些好的建議來通過,我永遠爲你可能有任何建議表示感謝。
嗨,你對KVO瞭解多少?你知道什麼觸發了通知發送? – hooleyhoop 2010-08-15 09:50:41
我很確定我明白什麼會觸發通知,但我不確定這與我的問題有什麼關係。 – Hooligancat 2010-08-15 21:57:36
嗯,這只是一個想法 - 你可以有一個額外的設置每個屬性,沒有觸發通知。我可以看到你可能不想那麼做。 – hooleyhoop 2010-08-15 22:15:42