我有一个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,它也不起作用。任何帮助都将不胜感激。谢谢!
发布于 2012-11-06 02:25:15
您没有这么说,但是看起来所有这些方法都是从您的自定义UIViewController或UIScrollViewController子类的实例中调用的。
最有可能的问题是这个实例本身没有被保留。
当您第一次从nib加载视图时,将同时调用-viewDidLoad和-viewWillAppear。然而,垃圾收集可能发生在这些调用和您对-loadScrollViewWithPage的调用之间,并且没有对象与视图控制器实例本身有任何连接。
如果是这样的话,在scoresDict上使用copy或retain并不能解决问题。您需要确保复制或保留视图控制器实例本身。找出需要保留视图控制器的对象,并确保它被保留。
测试这是否是问题的快速方法:在应用程序委托中创建一个"myViewController“属性。在viewDidLoad中,添加一行:
[[[UIApplication sharedApplication] delegate] setMyViewController:self];如果这解决了你的问题,那就意味着问题出在视图控制器的释放上。但是,这并不意味着这是您最好的解决方案--它只是一个诊断。你需要找出什么应该保留你的视图控制器,并确保它这样做。
https://stackoverflow.com/questions/12427636
复制相似问题