我正在尝试使用 NSUbiquitousKeyValueStore 存储键值。在安装应用程序时,它们似乎可以正常存储,但如果我从设备上删除应用程序并再次运行应用程序,键值似乎会丢失。这是预期的行为,还是我缺少什么?
我正在存储和检索这样的值:
-(void)setString:(NSString*)stringValue forKey:(NSString*)keyValue {
NSUbiquitousKeyValueStore *iCloudStore = [NSUbiquitousKeyValueStore defaultStore];
[iCloudStore setString:stringValue forKey:keyValue];
[iCloudStore synchronize];
}
-(NSString*)getStringForKey:(NSString*)keyValue {
NSUbiquitousKeyValueStore *iCloudStore = [NSUbiquitousKeyValueStore defaultStore];
return [iCloudStore stringForKey:keyValue];
}
我已经检查过的内容:
- 我在 Target Capabilities 中启用了 iCloud 和键值存储。
- 我的设备上启用了 iCloud Drive,并且应用程序本身也已启用。
- 我已经等了一段时间才尝试加载这些值,以确保它不仅仅是一个同步问题。
我已经根据Apple 文档为 NSUbiquitousKeyValueStoreDidChangeExternallyNotification在 NSNotificationCentre 注册了一个观察者。在安装后的第一次运行或后续运行时,永远不会调用我的观察者。我的代码(从Apple 文档中剥离)
NSUbiquitousKeyValueStore* store = [NSUbiquitousKeyValueStore defaultStore]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateKVStoreItems:) name:NSUbiquitousKeyValueStoreDidChangeExternallyNotification object:store]; [store synchronize]; - (void)updateKVStoreItems:(NSNotification*)notification { NSLog(@"RECEIVED DATA"); }
其他问题 -
- 有没有办法知道您的数据何时同步到云端?(即上传的数据)
- 或者相反,有没有办法告诉你的应用程序何时从云端成功同步?(即下载的数据)我希望NSUbiquitousKeyValueStoreDidChangeExternallyNotification会通知这个,但由于我没有收到这个通知,我怀疑它只是对于当另一台设备在应用程序打开时更新数据时, Apple 文档似乎证实了这一怀疑:
NSUbiquitousKeyValueStoreServerChange - iCloud 中更改的值。当另一台设备运行您的应用程序的另一个实例并连接到同一个 iCloud 帐户时,就会发生这种情况,它上传了一个新值。”