В настоящее время я работаю над Couchbase Lite
и отображает каждый документ в UITableView
.CBLLiveQuery vs kCBLDocumentChangeNotification
Мои вопросы, если document_id: abc12345 обновляется на стороне сервера (CouchDB) (либо вручную, либо с любого другого приложения IOS/Android/Web), что лучший подход к обновлению документа _id : abc12345 в UITableView
.
В нынешней ситуации я использую CBLLiveQuery
, и я не счастлив с ним, потому что он нуждается в CBLView (отображение/пониженную функции, и я индексировать его на основе _rev
из CBLDocument
) и создания CBLQuery
, а затем вызывая livequery [livequery start];
, а затем наблюдения с КВО, а затем бла-бла-бла ...
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
.
Когда я узнал о 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) observValueForKeyPath: (NSString *) keyPath ofObject: (id) изменение объекта: (NSDictionary *) изменить контекст: (void *) context' даже без каких-либо изменение документа на сервере. который излишне толкает метод в стеке. тогда как 'kCBLDocumentChangeNotification' не вызывает ненужных вызовов методов. Я знаю, что 'kCBLDocumentChangeNotification' медленнее, чем' liveQuery', но задержка незначительна.Любые дополнительные разъяснения будут указаны. – iNasir
Как я уже сказал, в liveQuery вы наблюдаете «строки», и вы будете уведомлены каждый раз, когда у него будет новое значение. –