我正在尝试使用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];
}
我已经检查了什么:
我已根据Apple docs在NSNotificationCentre中为NSUbiquitousKeyValueStoreDidChangeExternallyNotification注册了一名观察员。在安装后的第一次运行或后续运行中,我的观察者从未被调用过。我的代码(从Apple docs剥离)
NSUbiquitousKeyValueStore* store = [NSUbiquitousKeyValueStore defaultStore];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(updateKVStoreItems:) name:NSUbiquitousKeyValueStoreDidChangeExternallyNotification
object:store];
[store synchronize];
- (void)updateKVStoreItems:(NSNotification*)notification {
NSLog(@"RECEIVED DATA");
}
其他问题 -
NSUbiquitousKeyValueStoreServerChange - iCloud中更改的值。当另一台运行应用程序的另一个实例并连接到同一iCloud帐户的设备上传新值时,会发生这种情况。"
答案 0 :(得分:0)
您是否在Application Developer中为Apple Developer Portal中的app id启用了iCloud?之后,您还必须为应用程序创建配置文件。
我在代码中看到的唯一区别是"名称:"参数。您需要指定要观察NSUbiquitousKeyValueStoreDidChangeExternallyNotification
[[NSNotificationCenter defaultCenter]
addObserver: self
selector: @selector (storeDidChange:)
name: NSUbiquitousKeyValueStoreDidChangeExternallyNotification
object: [NSUbiquitousKeyValueStore defaultStore]];
您的代码在我的环境中发出警告
Instance method '-addObserver:selector:object:' not found (return type defaults to 'id')
我也一直在使用setObject:forKey:而不是setString:forKey: