目前我正在使用Couchbase Lite
,並在UITableView
中顯示每個文檔。CBLLiveQuery vs kCBLDocumentChangeNotification
我的問題是,如果一個DOCUMENT_ID:ABC12345是在服務器端(CouchDB的)(手動或任何其他應用的iOS/Android設備/網絡),這是更好的方法來更新文檔_id更新:abc12345 in UITableView
。
在目前的情況下我使用CBLLiveQuery
,我不喜歡它,因爲它需要一個CBLView (圖/縮小功能,而我基於對CBLDocument
_rev
建立索引),並創建CBLQuery
,然後調用的liveQuery [livequery start];
,然後用KVO觀察,然後等等等等......
self.liveQuery = [self startLiveQueryViewWithDatabase:database]; [self.liveQuery addObserver:self forKeyPath:@"rows" options:0 context:NULL]; [self.liveQuery start];
,我觀察到的事實是,每當實況查詢實例調用首次 KVO方法-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
被調用時服務器上的CBLDocument沒有任何更改。
當服務器上的任何文檔更新-(void)observeValueForKeyPath:
不會給我什麼已經改變/哪個文檔已經改變_id
,它只是給了我一堆文件ID _id
。
當我瞭解到kCBLDocumentChangeNotification
時,它給我正確的文檔ID _id
已更新。
[[NSNotificationCenter defaultCenter] addObserverForName:kCBLDocumentChangeNotification object:self queue:nil usingBlock:^(NSNotification *note) { CBLDatabaseChange* changes = note.userInfo[@"change"]; NSLog(@"Document : [%@]",changes.documentID); [self updateUserInterface:changes]; }];
請我需要知道哪些概念是更好地實現其中任意一個,其中一個將花費更少的時間(如果可能的話技術上)。
謝謝,在'liveQuery'中,KVO只需調用' - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context'即使沒有任何在服務器上更改文檔。這不需要在棧中推入一個方法。而'kCBLDocumentChangeNotification'不會對方法進行不必要的調用。我知道'kCBLDocumentChangeNotification'比'liveQuery'慢,但延遲可以忽略不計。任何進一步的澄清將受到關注。 – iNasir
正如我所說,在liveQuery中,您正在觀察「行」,並且每次有新值時都會收到通知。 –