我有一个Mac应用程序,在其中我使用NSUserDefaults
保存了每次安装标识符以用于分析。我有这样的代码:
-(NSString *)getInstallId
{
NSString *settingsKey = @"install_id_key";
NSString *result = [[NSUserDefaults standardUserDefaults] objectForKey:settingsKey];
if (result.length == 0)
{
result = [[NSUUID UUID] UUIDString];
[[NSUserDefaults standardUserDefaults] setObject:result forKey:settingsKey];
}
return result;
}
但是在至少某些High Sierra系统上,每次返回的值都不相同。即使在调试后立即尝试调用它,在调试中单步执行也会显示[objectForKey:settingsKey]
返回nil
。即使是not necessary,我也尝试致电synchronize
。
我还看到了这样的日志消息:
2019-04-08 11:35:26.249938-0700 MyApp [11283:59125] [用户默认设置]尝试为非持久首选项域CFPrefsPlistSource <0x6080000e0900中的install_id_key中的密钥设置8E548BCF-97E0-431F-B36A-B06913424010 >(域:com.myapp.MyApp,用户:kCFPreferencesCurrentUser,ByHost:否,容器:(空),需要刷新的内容:是)
除了“我重新启动并已修复”结果外,Google没有显示任何可用于此错误消息的信息。
这是怎么回事?我是否需要担心生产中发生的这种情况?它发生在存档和调试版本中。
默认系统中的Turning on logging会产生一些错误消息:
拒绝从进程8028读取{com.olivetree.BibleReaderMac,ianfallon,kCFPreferencesAnyHost,/ Users / username / Library / Containers / com.olivetree.BibleReaderMac / Data,托管:0}的读取,因为访问应用程序容器外部的首选项需要用户-preference-read或file-read-data沙箱访问
无法读取CFPrefsPlistSource <0x60c0000f3600>中的值(域:com.olivetree.BibleReaderMac,用户:kCFPreferencesCurrentUser,ByHost:否,容器:(空),需要刷新的内容:是):在应用程序容器外部访问首选项需要用户偏好读取或文件读取数据沙箱访问,与cfprefsd分离