我有一个NSDictionary,通过解析存储值。我在-viewDidLoad
分配和存储值。并访问-viewWillAppear
中的值。它工作得很好。
然后,我UIPageControl
与UIScrollView
。滚动UIScrollView
时,我再次访问同一个字典,它崩溃说
[CFString respondToSelector:]: send to deallocated....
- (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
,它也没有用。任何帮助,将不胜感激。谢谢!
答案 0 :(得分:0)
您没有这么说,但看起来所有这些方法都是从自定义UIViewController或UIScrollViewController子类的实例调用的。
最可能的问题是该实例本身未被保留。
首次从笔尖加载视图时,会调用-viewDidLoad和-viewWillAppear。但是,有可能在这些调用和对-loadScrollViewWithPage的调用之间发生垃圾收集,并且没有任何对象与视图控制器实例本身有任何连接。
如果是这种情况,在scoresDict上使用copy或retain将无法解决问题。您需要确保复制或保留视图控制器实例本身。找出需要保留视图控制器的对象,并确保它被保留。
测试这是否是问题的快速方法:在应用程序委托中创建“myViewController”属性。在viewDidLoad中,添加一行:
[[[UIApplication sharedApplication] delegate] setMyViewController:self];
如果这可以解决您的问题,则意味着问题是视图控制器被释放。但这并不意味着这是你最好的解决方案 - 它只是一个诊断。你需要弄清楚应该保留你的视图控制器的内容,并确保它这样做。