日志中的 NSUserDefaults 错误
NSUserDefaults errors in logs
我在日志中收到一些错误消息
[User Defaults] Failed to write value for key GameId in CFPrefsPlistSource<0x1740faf00> (Domain: xxx.xxxxxx, User: kCFPreferencesCurrentUser, ByHost: No, Container: (null)): Path not accessible, switching to read-only
[User Defaults] attempt to set for key in in read-only (due to a previous failed write) preferences domain CFPrefsPlistSource<0x1740faf00> (Domain: xxx.xxxxxx, User: kCFPreferencesCurrentUser, ByHost: No, Container: (null))
这是什么原因造成的?
我就是这样使用的 NSUserDefaults
:
- (NSString *)gameId
{
if (_gameId)
return _gameId;
_gameId = [[NSUserDefaults standardUserDefaults] objectForKey:@"GameId"];
return _gameId;
}
- (void)setGameId:(NSString *)aGameId
{
_gameId = aGameId;
[[NSUserDefaults standardUserDefaults] setObject:_gameId forKey:@"GameId"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
很多人在 Xcode 8.
上发现这个问题
“听起来很疯狂,尝试重新启动 phone 和主机,有时 Xcode 可能会因为总的原因而卡住,只有重新启动才有帮助。
build with Xcode 8.1 Beta,你会看到同样的警告,但你也会得到值。 “
如果您尝试使用 userDefault 将数据保存到扩展 APP 时遇到此问题,也许您编写了以下代码:[[NSUserDefaults standardUserDefaults] initWithSuiteName:@"group.xxx.com"];,此代码重置默认用户默认值。实际上,正确的代码是:[[NSUserDefaults alloc] initWithSuiteName:@"group.xxx.com"];
http://www.jianshu.com/p/e782104c3bc3
我遇到了类似的错误:
[User Defaults] attempt to set <private> for key in <private> in read-only (due to a previous failed write) preferences domain CFPrefsPlistSource<0x1700f5f80>
但这只是在我插入 Xcode 时发生的。
设备重启解决了这个问题。
我刚刚遇到了同样的错误。我的错误是因为我多次调用同步。
在所有错误消息消失后调用 [userDefaults synchronize]。
我刚刚删除了应用程序并通过 Xcode 重新安装。使用 XCode 8.2.1.
我想分享我对这个问题的解决方案。就我而言,该错误是合法错误,我的数据未正确保存。事实证明错误是由循环中的 NSUserDefaults "data saving" 引起的。
"data saving" 我的意思是这个(伪代码):
loop{
[defaults setObject:@"Data" forKey:@"Key"];
[defaults synchronize];
}
所以代码非常快地执行了多次并导致了问题。
我猜 "synchronize" 无法处理并发调用。
需要做的是:
loop{
[defaults setObject:@"Data" forKey:@"Key"];
}
[defaults synchronize];
synchronize 在设置完所有对象后调用一次。
我在日志中收到一些错误消息
[User Defaults] Failed to write value for key GameId in CFPrefsPlistSource<0x1740faf00> (Domain: xxx.xxxxxx, User: kCFPreferencesCurrentUser, ByHost: No, Container: (null)): Path not accessible, switching to read-only
[User Defaults] attempt to set for key in in read-only (due to a previous failed write) preferences domain CFPrefsPlistSource<0x1740faf00> (Domain: xxx.xxxxxx, User: kCFPreferencesCurrentUser, ByHost: No, Container: (null))
这是什么原因造成的?
我就是这样使用的 NSUserDefaults
:
- (NSString *)gameId
{
if (_gameId)
return _gameId;
_gameId = [[NSUserDefaults standardUserDefaults] objectForKey:@"GameId"];
return _gameId;
}
- (void)setGameId:(NSString *)aGameId
{
_gameId = aGameId;
[[NSUserDefaults standardUserDefaults] setObject:_gameId forKey:@"GameId"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
很多人在 Xcode 8.
上发现这个问题“听起来很疯狂,尝试重新启动 phone 和主机,有时 Xcode 可能会因为总的原因而卡住,只有重新启动才有帮助。
build with Xcode 8.1 Beta,你会看到同样的警告,但你也会得到值。 “
如果您尝试使用 userDefault 将数据保存到扩展 APP 时遇到此问题,也许您编写了以下代码:[[NSUserDefaults standardUserDefaults] initWithSuiteName:@"group.xxx.com"];,此代码重置默认用户默认值。实际上,正确的代码是:[[NSUserDefaults alloc] initWithSuiteName:@"group.xxx.com"]; http://www.jianshu.com/p/e782104c3bc3
我遇到了类似的错误:
[User Defaults] attempt to set <private> for key in <private> in read-only (due to a previous failed write) preferences domain CFPrefsPlistSource<0x1700f5f80>
但这只是在我插入 Xcode 时发生的。
设备重启解决了这个问题。
我刚刚遇到了同样的错误。我的错误是因为我多次调用同步。
在所有错误消息消失后调用 [userDefaults synchronize]。
我刚刚删除了应用程序并通过 Xcode 重新安装。使用 XCode 8.2.1.
我想分享我对这个问题的解决方案。就我而言,该错误是合法错误,我的数据未正确保存。事实证明错误是由循环中的 NSUserDefaults "data saving" 引起的。
"data saving" 我的意思是这个(伪代码):
loop{
[defaults setObject:@"Data" forKey:@"Key"];
[defaults synchronize];
}
所以代码非常快地执行了多次并导致了问题。 我猜 "synchronize" 无法处理并发调用。
需要做的是:
loop{
[defaults setObject:@"Data" forKey:@"Key"];
}
[defaults synchronize];
synchronize 在设置完所有对象后调用一次。