首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NSDictionary保留崩溃

NSDictionary保留崩溃
EN

Stack Overflow用户
提问于 2012-09-14 23:30:52
回答 1查看 127关注 0票数 2

我有一个NSDictionary,通过解析来存储值。我在-viewDidLoad中分配和存储值。并访问-viewWillAppear中的值。它工作得非常好。

然后,我使用UIPageControlUIScrollView。当滚动UIScrollView时,我再次访问相同的字典,它崩溃了

[CFString respondToSelector:]: send to deallocated....

代码语言:javascript
运行
复制
- (void) viewDidLoad {

    [super viewDidLoad];
    scoresDict = [[NSDictionary alloc] initWithDictionary:[scoreObj scores]];
}

- (void)loadScrollViewWithPage:(int)page {

    if (page < 0) 

        return;

    if (page >= kNumberOfPages)

    return;

    NSLog(@“scoresDict %@”,scoresDict);
}

我尝试在相同的函数中使用retain,但没有成功。还有copy,它也不起作用。任何帮助都将不胜感激。谢谢!

EN

Stack Overflow用户

发布于 2012-11-06 02:25:15

您没有这么说,但是看起来所有这些方法都是从您的自定义UIViewController或UIScrollViewController子类的实例中调用的。

最有可能的问题是这个实例本身没有被保留。

当您第一次从nib加载视图时,将同时调用-viewDidLoad和-viewWillAppear。然而,垃圾收集可能发生在这些调用和您对-loadScrollViewWithPage的调用之间,并且没有对象与视图控制器实例本身有任何连接。

如果是这样的话,在scoresDict上使用copy或retain并不能解决问题。您需要确保复制或保留视图控制器实例本身。找出需要保留视图控制器的对象,并确保它被保留。

测试这是否是问题的快速方法:在应用程序委托中创建一个"myViewController“属性。在viewDidLoad中,添加一行:

代码语言:javascript
运行
复制
[[[UIApplication sharedApplication] delegate] setMyViewController:self];

如果这解决了你的问题,那就意味着问题出在视图控制器的释放上。但是,这并不意味着这是您最好的解决方案--它只是一个诊断。你需要找出什么应该保留你的视图控制器,并确保它这样做。

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12427636

复制
相关文章

相似问题

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