首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用setInteger时NSUserDefaults崩溃

使用setInteger时NSUserDefaults崩溃
EN

Stack Overflow用户
提问于 2013-01-09 17:30:57
回答 4查看 664关注 0票数 1

我在我的应用程序中使用了这部分代码,它像预期的那样工作。但现在,它在使用setInteger时崩溃了:

代码语言:javascript
复制
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
int selEvent = [defaults integerForKey:@"selected_event"];
/*
 * Do Something with selEvent
 * New ID is in NSNumber event_id
 */
[defaults setInteger:[event_id intValue] forKey:@"selected_event"]; //Crashes on this line
[defaults synchronize];

在Xcode 4.5.1和iPad 6.0模拟器中工作。

我要买一台EXC_BAD_ACCESS。

我的问题的原因是什么?

EN

回答 4

Stack Overflow用户

发布于 2014-06-16 17:59:52

我也有同样的问题。我追踪到了其他的东西:

我将整数存储在NSUserDefaults中,代码如下:

代码语言:javascript
复制
[[NSUserDefaults standardUserDefaults] setInteger:_currentBannerIndex forKey:@"currentBannerIndex"];

在一段时间后,它在相同的点崩溃,写入相同的值。原因是在这段时间之后,我使用如下代码注册了NSUserdefaults中的更改:

代码语言:javascript
复制
[[NSNotificationCenter defaultCenter] addObserver:self selector: @selector(userDefaultsChanged) name:NSUserDefaultsDidChangeNotification object:nil];

这是在初始化时在导入器中完成的。在取消分配导入器之后,对用户默认设置的新写入将触发已消失对象的观察者。轰隆隆。撞车。

当然,解决方案是删除我的导入器的dealloc中的观察者。

票数 3
EN

Stack Overflow用户

发布于 2017-06-11 14:06:20

对我来说,问题出在[event_id intValue]

event_idNSString &它正在发布,因此发生了这个错误。

票数 1
EN

Stack Overflow用户

发布于 2013-01-09 17:47:51

找到我的问题了:

代码语言:javascript
复制
NSDictionary *defaultUserDefaults = [NSDictionary dictionaryWithObjectsAndKeys:
                                     [NSNumber numberWithInt:0], @"selected_event",
                                     nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:defaultUserDefaults];

这在以前的setInteger中是有效的:

已使用setObject更改所有setIntegers。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14232023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档