共享 NSUserDefaults plist 文件?
Posted
技术标签:
【中文标题】共享 NSUserDefaults plist 文件?【英文标题】:Sharing NSUserDefaults plist file? 【发布时间】:2015-03-16 19:05:43 【问题描述】:我想使用 NSUserDefaults 的功能来保存状态。我目前确实有这个工作。但我想复制这个 plist 文件并将其应用于另一台设备上的同一个应用程序。
有什么方法可以将文件名传递给 NSUserDefaults 还是我需要使用其他类?还是可以将 plist 与另一台设备的同一个应用共享?
device1 和 device2 上的应用是同一个应用。我不想在不同应用之间共享数据。
【问题讨论】:
【参考方案1】:将它作为字典传递对你有用吗?
NSDictionary *dict = [[NSUserDefaults standardUserDefaults] dictionaryRepresentation];
然后在另一台设备上:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
for (NSString *key in dictionaryRepresentation.allKeys)
id ob = dictionaryRepresentation[key];
[defaults setObject:ob forKey:key];
或者,您可以将dict
写入.plist
文件,将其传输过来,从.plist
解码到dict
,然后按照我上面的操作。
写入.plist
文件:
[dict writeToFile:@"path/to/your/file.plist" atomically:YES];
从.plist
文件中读取:
NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:@"path/to/your/file.plist"];
【讨论】:
似乎还有更多工作要做。与应用组相比,这有什么优势? 应用组对我来说意味着相同的设备,但听起来您想将数据传输到辅助设备。也许我误解了应用程序组。如果您可以跨设备共享应用组,请务必这样做,因为这可能会更容易。 我不确定应用程序组是否允许这样做。我刚刚离开了gregheo的回答。我真的找不到有关应用程序组的任何信息。您的解决方案似乎解决了将数据序列化的问题。但是它是如何传递给 device2 的呢? 对于那部分,我假设您涉及某种类型的后端,直接从应用程序到应用程序将涉及多点连接或某种蓝牙连接。如果您不做后端,我建议您使用 multipeer。不过,您必须处理权限和其他事情,所以后端可能会更容易。 有什么理由不用icloud?【参考方案2】:如果它们都是您的应用,您可以考虑使用 app groups 让两个应用访问共享容器。在这种情况下,您将照常使用 NSUserDefaults。
否则,您无法将文件名或 URL 传递给 NSUserDefaults。您需要使用 NSDictionary + 归档自己滚动,或者只执行一次 - 即将当前默认值复制到 plist,以某种方式将其转移,然后将值写入默认值。
【讨论】:
有更多关于应用组的信息吗?搜索文档没有发现任何东西。如果 device1 向 plist 添加了一些内容并且应用程序正在 device2 上运行,那么它如何处理应用程序打开后的更新?另外,这是否使用 iCloud 将信息从设备移动到设备? 啊,我看到了对两个设备上的同一个应用程序的问题的编辑。如果在两台设备上都是同一个用户,那么如果同步是您想要的,iCloud 键/值存储将是使它们保持同步的一种解决方案。应用组更适合同一设备上的多个应用。以上是关于共享 NSUserDefaults plist 文件?的主要内容,如果未能解决你的问题,请参考以下文章
在 iOS 应用程序中处理数据(选择啥?NSData、CoreData、sqlite、PList、NSUserDefaults)
IOS 存储方式(PList、NSUserDefaults、归档、CoreData、数据库、文件)
如何将我的 NSUserDefaults .plist 同步到 iCloud?
将带有 NSAttributed 字符串的字典保存到 PList 或 NSUserDefaults