NSUserDefault 数据删除期间应用程序崩溃
App crashing during NSUserDefault data removal
当我调用这个函数时,我的应用程序崩溃了。
我收到此错误:[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[1].
我该如何解决,如果你知道请帮忙。
NSUserDefaults *defs = [NSUserDefaults standardUserDefaults];
NSDictionary *dict = [defs dictionaryRepresentation];
for (id key in dict)
{
NSObject * object = [dict objectForKey:key];
if(object != nil)
{
[defs removeObjectForKey:key];
[defs synchronize];
}
}
请使用以下代码。应该对你有帮助
NSString *applicationDomain = [[NSBundle mainBundle] bundleIdentifier];
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:applicationDomain];
您也可以使用
NSDictionary *defaultsDictionary = [[NSUserDefaults standardUserDefaults] dictionaryRepresentation];
for (NSString *key in [defaultsDictionary allKeys]) {
[[NSUserDefaults standardUserDefaults] removeObjectForKey:key];
}
[[NSUserDefaults standardUserDefaults] synchronize]; //outside loop.
注意:您提到的崩溃与字典中的 setValue ForKey 有关。请使用断点并查看您在字典中的何处插入 nil 值。
尝试将所需条目的键添加到循环内的 NSArray 中
然后在循环外做 removeObjectsForKeys:array
最好不要在 for 循环内枚举时删除条目
我对你问题的解决方案是
NSUserDefaults *defs = [NSUserDefaults standardUserDefaults];
NSDictionary *dict = [userDefaults dictionaryRepresentation];
for (id key in dict) {
[dict removeObjectForKey:key];
}
[defs synchronize];
当我调用这个函数时,我的应用程序崩溃了。
我收到此错误:[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[1].
我该如何解决,如果你知道请帮忙。
NSUserDefaults *defs = [NSUserDefaults standardUserDefaults];
NSDictionary *dict = [defs dictionaryRepresentation];
for (id key in dict)
{
NSObject * object = [dict objectForKey:key];
if(object != nil)
{
[defs removeObjectForKey:key];
[defs synchronize];
}
}
请使用以下代码。应该对你有帮助
NSString *applicationDomain = [[NSBundle mainBundle] bundleIdentifier];
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:applicationDomain];
您也可以使用
NSDictionary *defaultsDictionary = [[NSUserDefaults standardUserDefaults] dictionaryRepresentation];
for (NSString *key in [defaultsDictionary allKeys]) {
[[NSUserDefaults standardUserDefaults] removeObjectForKey:key];
}
[[NSUserDefaults standardUserDefaults] synchronize]; //outside loop.
注意:您提到的崩溃与字典中的 setValue ForKey 有关。请使用断点并查看您在字典中的何处插入 nil 值。
尝试将所需条目的键添加到循环内的 NSArray 中 然后在循环外做 removeObjectsForKeys:array
最好不要在 for 循环内枚举时删除条目
我对你问题的解决方案是
NSUserDefaults *defs = [NSUserDefaults standardUserDefaults];
NSDictionary *dict = [userDefaults dictionaryRepresentation];
for (id key in dict) {
[dict removeObjectForKey:key];
}
[defs synchronize];