Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS上的Dropbox数据存储API错误:数据存储默认值已打开_Ios_Dropbox Api - Fatal编程技术网

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

iOS上的Dropbox数据存储API错误:数据存储默认值已打开,ios,dropbox-api,Ios,Dropbox Api,我在几个不同的视图控制器中使用以下代码来侦听Dropbox数据存储更改 每个视图控制器都有一个定义如下的属性: @property (nonatomic, retain) DBDatastore *store; 然后我在listenForRemoteDataChanges中添加了一个观察者,代码如下: - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; //Listen for remote

我在几个不同的视图控制器中使用以下代码来侦听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;
  }
}
我不断收到此错误,数据存储同步随后失败:

ERR:DROPBOX\u ERROR\u ALREADYOPEN:database\u manager.cpp:155:数据存储默认值已打开


看起来,
DBDatastore
在控制器之间保持打开状态,即使每个控制器都有自己的
self.store
属性。为什么?我以为我是在用
[self.store close]的
视图将消失
方法关闭数据存储知道我做错了什么吗?

正如克利夫顿试图解释的那样,这意味着在关闭第一个视图控制器之前,您要再次打开它(第二个视图控制器)。一个数据存储只能打开一次,直到它关闭为止,所以这就是错误试图告诉您的


也许您可以使用单例模式?

视图将出现
可能是在
视图消失
之前调用的。最好将所有Dropbox代码放在某种表示一个数据存储实例的“模型”类中。然后,每个视图控制器都可以共享该模型类的一个实例。这将有助于确保您的应用程序中只存在任何数据存储的单个实例。。。可以我试图将Dropbox代码集中在
PPDropboxSync
类中。你有没有一个例子可以说明我如何跨类共享数据存储实例?很抱歉我的回复太晚了。我不知怎么弄丢了这个。我使用了单例,只需在我的应用程序中的多个视图控制器上打开和关闭相同的数据存储。