Tag: nsubiquitouskeyvaluestore

NSUbiquitousKeyValueStore同步问题

我什么也没有,但NSUbiquitousKeyValueStore麻烦,并得到它可靠地跨两个设备同步。 它开始让我发疯。 狂。 我看我的代码打电话给: [[NSUbiquitousKeyValueStore defaultStore] setObject:_someData forKey:@"SomeData"]; [[NSUbiquitousKeyValueStore defaultStore] synchronize]; 但是更多的时候,数据永远不会显示在另一台设备上。 我已经看到它几秒钟内同步,其他时间,我已经等了一个小时,从来没有看到同步。 我将设备插入xcode并开始debugging,有时数据突然popup,有时则不会。 有时候确实如此。 完成这个调用之后,退出并重新启动应用程序,如果我看到了旧数据,而不是我刚刚发布的新数据。 在同一台设备上。 当应用程序启动时,我打电话给: _someData = [[NSUbiquitousKeyValueStore defaultStore] stringForKey:@"SomeData"]; 我假设没有需要运行的init代码。 没有我find的例子。 当它工作,它工作得很好。 那么今天晚上,我正在查看设备日志,并在我最后一次退出(并尝试发送数据)后发现: Jul 8 21:32:03 unknown syncdefaultsd[17296] <Warning>: Error writing storage for com.mycompany.myapp to /private/var/mobile/Applications/4AC8C56E-6060-408B-84F9-F7EC336221D9/Library/SyncedPreferences/com.mycompany.myapp.plist: Error Domain=NSCocoaErrorDomain Code=4 "The operation couldn't be completed. (Cocoa error 4.)" UserInfo=0xde80d40 {NSFilePath=/private/var/mobile/Applications/4AC8C56E-6060-408B-84F9-F7EC336221D9/Library/SyncedPreferences, NSUnderlyingError=0xde80b20"The operation […]

iCloud NSUbiquitousKeyValueStore初始同步/访问延迟 – 如何处理?

我正在使用NSUbiquitousKeyValueStore来存储一些应用程序设置。 我的逻辑是:当我在本地保存数据时,我把它保存到NSUbiquitousKeyValueStore也作为备份。 当我需要设置时,我在本地读取,如果在本地找不到数据(例如重新安装应用程序),则只使用iCloud键值存储。 如果用户有多个设备共享一个icloud ID,他可以在一台设备上写入设置并将它们下载到另一台(我警告他重写)。 我有一个奇怪的问题。 脚步: 安装一个应用程序,并将其数据保存到NSUbiquitousKeyValueStore。 确保数据在那里。 删除了应用程序(假设数据仍然存在于iCloud中)。 为了以防万一,等待几分钟,然后从Xcode内部安装并启动应用程序。 试图读取设置密钥使用[[NSUbiquitousKeyValueStore defaultStore] dataForKey:@“mykeyname”] – 有时可以,但有时键没有find! 等了15秒,再试一次。 成功。 困惑。 所以看起来像ios需要一些时间来为我的应用程序在dataForKey:call本地提供远程键值存储。 如果我写了这样一个系统(实际上我曾经 – 在不久之前,在另一个生活中),显然在询问和接收关键值数据之前必须有一个延迟。 所以我想通知一下:“我们在第一次启动时完成了下载/同步键值存储”或类似的事情。 据我所知,我可以在主线程中同步使用NSUbiquitousKeyValueStore(这对我来说很方便)。 但是[[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil]返回一个有效的url,然后我得到“key is not found”。 所以我不能依靠它。 有没有办法确保NSUbiquitousKeyValueStore工作是一个下载? 尤其是在networking速度慢的情况下 UPDATE 添加[[NSUbiquitousKeyValueStore defaultStore]同步](如在苹果文档中写的)初始化和加载是有点帮助。 还有很多问题,以iCloud。 昨天我已经成功地将数据保存到手机1上的键值存储,并在手机2上恢复。今天,我已经删除了手机2上的应用程序,并试图恢复数据。 但即使[[NSFileManager的defaultManager] URLForUbiquityContainerIdentifier:nil]返回有效的URL,我调用[[NSUbiquitousKeyValueStore defaultStore]同步]我调用dataForKey:MY_DATA_KEY时得到nil。 当我尝试从手机1(应用程序仍然安装)从icloud恢复数据成功,但是当我重新安装在这个手机上的应用程序恢复不成功了。 临时解决scheme是:“closuresiCloud->文档和数据 – closures和打开networking – 打开文档和数据”,但你也应该等待几分钟,然后它应该工作。 所以,问题:1.你有这样的问题与iCloud? 2.有什么办法可以找出数据不可用还是只是没有下载? 3.是否有任何已知的“延迟”iCloud? 我听说过7秒左右,但显然不是这样。 4.看起来应用程序不是非阻塞的iCloud数据更新速度非常快(秒),但是当您重新安装应用程序icloud需要几分钟才能实现键值存储。 有什么办法可以强制这个过程? PS下面是我的CloudHelper供您参考 […]

如何在只使用NSUbiquitousKeyValueStore时编程检测用户设备上是否启用了iCloud?

我正在使用NSUbiquitousKeyValueStore将一些偏好数据同步到iCloud。 我发现如果用户在“设置应用程序”中禁用了iCloud的“文档&数据”项, NSUbiquitousKeyValueStore就无法将其数据同步到iCloud。 所以,我想先检查一下,如果这个设置是打开的。search结果后,我发现这个代码片段: NSURL *ubiq = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil]; NSLog(@"url=%@",ubiq); if (!ubiq) { UIAlertView *av = [[UIAlertView alloc] initWithTitle:nil message:@"Please enable iCloud in Setting app" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; [av show]; return; } 我想知道的是,这是否是检测的唯一方法,即使我只是使用NSUbiquitousKeyValueStore (而不是iCloud文档存储)。 有更好的select吗?