我NSUbiquitousKeyValueStore用来将一些偏好数据同步到iCloud.我发现如果用户在"设置应用程序"中禁用iCloud的"文档和数据"项,NSUbiquitousKeyValueStore则无法将其数据同步到iCloud.所以,我想首先检查此设置是否已打开.我找到了这段代码片段:
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;
}
Run Code Online (Sandbox Code Playgroud)
我想知道的是,这是否是检测的唯一方法,即使我只是使用NSUbiquitousKeyValueStore(不是iCloud文档存储).还有更好的选择吗?
关于如何使用NSUbiquitousKeyValueStore边缘情况的文档不清楚.
如果我想设置一个值,我理解我应该为两者设置一个值NSUserDefaults,NSUbiquitousKeyValueStore因为可以禁用iCloud.但是,在我的测试中,[NSUbiquitousKeyValueStore defaultStore]即使禁用了iCloud(在Mac OS上测试),也会返回有效对象.
另外,据我所知,如果启用iCloud,则将NSUbiquitousKeyValueStore值存储到磁盘(并可离线使用).如果您确定数据少于64KB,使用NSUserDefaults的原因是什么?
iphone cocoa nsuserdefaults icloud nsubiquitouskeyvaluestore