在我的ios应用中,我设置了拉复制。这是代码
- (void) prepareCouchBaseAuthentication : (NSArray *)arrUserId {
NSError* error;
CBLManager* mng = [CBLManager sharedInstance];
CBLDatabase *database = [mng databaseNamed: kDatabaseScore error: &error];
if (!database) {
[self showAlert: @"Couldn't open database" error: error fatal: YES];
return;
}
NSURL* serverDbURL = [NSURL URLWithString: kServerScoreURL];
objAppDelegete.pull = [database createPullReplication: serverDbURL];
objAppDelegete.pull.continuous =YES;
objAppDelegete.pull.channels = arrUserId;
NSNotificationCenter* nctr1 = [NSNotificationCenter defaultCenter];
[nctr1 addObserver: self selector: @selector(replicationProgressScore:)
name: kCBLReplicationChangeNotification object: objAppDelegete.pull];
[objAppDelegete.pull start];
}
我已尝试按照couchbase文档中的建议使用NSThread调用此函数
[NSThread detachNewThreadSelector: @selector(prepareCouchBaseAuthentication) toTarget:self withObject: nil];
但过了一段时间它会停止同步?同步时是否有任何异常。如何检查是否发生任何异常?
我的要求是来自couchserver的连续同步实时Feed。是的它会耗尽电池。 有什么建议吗?
答案 0 :(得分:3)
连续运行:复制器对象上有一个名为continuous
的属性(在代码示例中已启用),告诉它侦听本地数据库的更改(用于推送复制)和远程数据库(用于拉动复制)。在您致电replication.stop()
。
在后台持续运行:在后台连续运行复制(当应用关闭时)有点棘手。我写了一篇关于在iOS上使用背景提取API的帖子(http://blog.couchbase.com/ios-background-fetch-to-sync-hacker-news-stories)。操作系统将定期唤醒后台获取服务并启动单次拉取复制。另一种方法是在从服务器接收静默推送通知时启动复制。