gpt4 book ai didi

ios - iCloud:NSUbiquitousKeyValueStore 问题

转载 作者:行者123 更新时间:2023-11-28 19:03:59 24 4
gpt4 key购买 nike

我正在我的应用程序中启用 iCloud 以保存一些首选项。iCloud 在功能部分启用,我的配置文件已更新:

enter image description here

我保存和检索测试示例的代码如下:

NSUbiquitousKeyValueStore *cloudStore = [NSUbiquitousKeyValueStore defaultStore];

if ([[cloudStore stringForKey:@"testString"] length] == 0) {
NSLog(@"Nothing in iCloud - setting a value...");
[cloudStore setString:@"I'm live in iCloud!" forKey:@"testString"];
[cloudStore synchronize];
} else {
NSString *result = [cloudStore stringForKey:@"testString"];
NSLog(@"Found something in iCloud - here it is: %@", result);
}

我的问题是数据只保存在本地(比如NSUserDefaults)。当我删除设备中的应用程序时,保存的数据无法恢复。在其他设备中,显然,数据也无法恢复。

第一次保存数据。接下来,如果我再次打开该应用程序,则 else 代码可以很好地检索数据。但是当我删除应用程序并再次运行时,数据没有保存。

似乎数据没有保存在 iCloud 上,只保存在本地。

在我的项目中唯一“奇怪”的是项目名称与包名称不同。

更新:

我的问题只出现在 iOS6 中。在 iOS7 中一切正常。当我在带有 iOs 6 的设备中调试我的应用程序时,在“调试导航器”中 iCloud 部分显示:

enter image description here

配置 iCloud 的所有步骤似乎都正常(对于配备 iOs7 的设备工作正常)并且如果我使用以下代码测试它工作正常:

NSURL *ubiq = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil];
if (ubiq) {
NSLog(@"iCloud at %@", ubiq);

} else {
NSLog(@"No iCloud access");
}

怎么了?

谢谢!

最佳答案

您正在尝试从尚未下载的 iCloud 检索数据。下载操作需要一些时间,您应该注册 NSUbiquitousKeyValueStoreDidChangeExternallyNotification 以便能够从 iCloud 访问新数据。这是一个示例代码:

- (void) registerForiCloudNotificatons
{
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(handleChangesFromiCloud:)
name:NSUbiquitousKeyValueStoreDidChangeExternallyNotification
object:[NSUbiquitousKeyValueStore defaultStore]];
}

- (void) handleChangesFromiCloud: (NSNotification *) notification
{
NSDictionary * userInfo = [notification userInfo];
NSInteger reason = [[userInfo objectForKey:NSUbiquitousKeyValueStoreChangeReasonKey] integerValue];
// 4 reasons:
switch (reason) {
case NSUbiquitousKeyValueStoreServerChange:
// Updated values
break;
case NSUbiquitousKeyValueStoreInitialSyncChange:
// First launch
break;
case NSUbiquitousKeyValueStoreQuotaViolationChange:
// No free space
break;
case NSUbiquitousKeyValueStoreAccountChange:
// iCloud accound changed
break;
default:
break;
}

NSArray * keys = [userInfo objectForKey:NSUbiquitousKeyValueStoreChangedKeysKey];
for (NSString * key in keys)
{
NSLog(@"Value for key %@ changed", key);
}
}

关于ios - iCloud:NSUbiquitousKeyValueStore 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22117306/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com