我的目标是检查用户的数据存储区,看看他们之前是否已将数据同步到默认数据存储区。如果他们这样做了,我会下拉并同步所有数据。如果他们没有,我会将他们的本地数据推送到Dropbox。
我已经尝试过很多方法来检查数据是否存在,但我的结果却不一致。
我设置了一个按钮来尝试一些代码:
- (IBAction)buttonSyncDropbox:(id)sender {
//Initiate a Datastore
DBAccount *account = [[DBAccountManager sharedManager] linkedAccount];
self.store = [DBDatastore openDefaultStoreForAccount:account error:nil];
//Sync so our local copy matches the server
[self.store sync:nil];
//Check if there is an "aircraft" table already
DBTable *currentTable = [self.store getTable:@"aircraft"];
NSArray *list = [currentTable query:nil error:nil];
NSLog(@"%@",list);
/* Half the time, the log output shows this:
"(null)"
...and this the other half:
(
"DBRecord(89BvrTEcSElewsFhw0B1mg)",
"DBRecord(PpGb17BNF3Psn7jR2skZkQ)"
)
*/
}
每次执行此代码时,我都不会在aircraft
表中看到记录列表吗?缺乏一致性很难处理。我应该用观察者或其他什么来听这些数据吗?
答案 0 :(得分:0)
我的猜测是,这是一场竞争条件。第一次链接帐户时,加载数据需要一些时间,您需要设置一个观察者来等待初始同步。
或许有些困惑在这里:
//Sync so our local copy matches the server
[self.store sync:nil];
那不是sync
所做的。 sync
做了两件事:
sync
后的任何本地更改排队,以便稍后(异步)发送到服务器。