Couchbase Lite перестает синхронизироваться, когда приложение возобновляет работу в фоновом режиме

Попробовав образец приложения Couchbase lite, он отлично работает, пока я не переведу приложение в фоновый режим, нажав кнопку «Домой». Когда я возвращаюсь в приложение, и оно выходит на передний план, синхронизация перестает работать, и nsnotifications перестают срабатывать. Каков наилучший способ продолжить синхронизацию Couchbase lite, когда он снова выйдет на передний план? Почему он вообще перестает получать эти уведомления?

Вот пример.

https://github.com/couchbaselabs/Grocery-Sync-iOS

- (void)updateSyncURL {
    ...

    // Tell the database to use this URL for bidirectional sync.
    // This call returns an array of the pull and push replication objects:
    NSArray* repls = [self.database replicateWithURL: newRemoteURL exclusively: YES];
    if (repls) {
        _pull = repls[0];
        _push = repls[1];
        _pull.continuous = _push.continuous = YES;
        // Observe replication progress changes, in both directions:
        NSNotificationCenter* nctr = [NSNotificationCenter defaultCenter];
        [nctr addObserver: self selector: @selector(replicationProgress:)
                     name: kCBLReplicationChangeNotification object: _pull];
        [nctr addObserver: self selector: @selector(replicationProgress:)
                     name: kCBLReplicationChangeNotification object: _push];
    }
}

Должен ли я просто установить наблюдатель, чтобы приложение вышло на передний план и снова запустило updateSyncURL? Если да, то лучше ли добавлять этого наблюдателя только тогда, когда приложение переходит в фоновый режим, и удалять после того, как оно выходит на передний план? Или это не имеет значения с точки зрения эффективности/передовой практики?

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateSyncURL) name:UIApplicationDidBecomeActiveNotification object:[UIApplication sharedApplication]];

person MonkeyBonkey    schedule 29.12.2013    source источник


Ответы (2)


Похоже, если я установлю репликацию на «постоянную», она возобновится в фоновом режиме приложения.

e.g.

_pull.persistent = YES;
person MonkeyBonkey    schedule 30.12.2013

Я вызываю его из приложения: didFinishLaunchingWithOptions. Быстрый тест моего приложения показал, что оно успешно воспроизводится после перехода на главный экран и обратно.

person Matt Jennings    schedule 30.12.2013
comment
Вы имеете в виду в DemoAppDelegate? Я только что попробовал это проверить, и это не сработало. Я тестирую на симуляторе ios 7 и на 5s. - person MonkeyBonkey; 30.12.2013