iOS上的Dropbox数据存储API错误:数据存储区默认已打开

时间:2014-07-09 16:29:05

标签: ios dropbox-api

我在几个不同的视图控制器中使用以下代码来监听Dropbox数据存储区更改。

每个视图控制器都有一个如下定义的属性:

@property (nonatomic, retain) DBDatastore *store;

然后我使用以下代码在listenForRemoteDataChanges内添加一个观察者:

- (void)viewWillAppear:(BOOL)animated {
  [super viewWillAppear:animated];

  //Listen for remote Dropbox changes
  DBAccount *account = [[DBAccountManager sharedManager] linkedAccount];
  if(account){
    self.store = [DBDatastore openDefaultStoreForAccount:account error:nil];
    __weak typeof(self) weakSelf = self;

    [[PPDropboxSync sharedDropboxSync] listenForRemoteDataChanges:self.store weakController:weakSelf];
  }
}

...然后使用以下方法删除观察者:

- (void)viewWillDisappear:(BOOL)animated {
  [super viewWillDisappear:animated];

  //Stop listening for Dropbox changes
  if(self.store) {
    [self.store removeObserver:self];
    [self.store close];
    self.store = nil;
  }
}
-(void)dealloc {
  //Deallocate NSNotifications (prevents mistakenly calling unavailable notification which causes crashes)
  [[NSNotificationCenter defaultCenter] removeObserver:self];

  //Stop listening for Dropbox changes
  if(self.store) {
    [self.store removeObserver:self];
    [self.store close];
    self.store = nil;
  }
}

我一直收到此错误,数据存储同步随后失败:

  

错误:DROPBOX_ERROR_ALREADYOPEN:database_manager.cpp:155:数据存储区默认已打开

DBDatastore似乎从控制器到控制器保持打开状态,即使它们都有自己的self.store属性。为什么?我以为我正在使用viewWillDisappear方法使用[self.store close];关闭数据存储区。知道我做错了什么吗?

1 个答案:

答案 0 :(得分:2)

正如Clifton试图解释的那样,这意味着你在关闭第一个之前第二次打开它(对于第二个视图控制器)。数据存储区只能打开一次,直到关闭为止,这就是错误试图告诉您的内容。

也许你可以使用单身模式?