我有一个带有4个标签栏项目的iPhone应用程序。其中一个是地图。我获取用户的当前位置并计算用户到城市周围某些位置的距离。我在NSMutableDictionary中存储这些位置的坐标和距离。
distanceDic = [[NSMutableDictionary alloc]initWithObjects:coordinates forKeys:distance];
在我的导航栏上,我有一个显示“列表”的按钮,因此您可以从当前位置查看最近的位置。我在用户等待在tableview中查看结果时进行计算。这项工作很棒,我可以根据需要多次按下按钮,并获得正确的结果。但是,如果按另一个标签栏项目,即“新闻”,请返回地图并按列表按钮,字典为空。
我在
中放了一个带有键数的NSLog-(void)viewDidDisappear:(BOOL)animated
当您单击导航栏上的“列表”按钮和另一个选项卡时,将同时调用此方法。单击“列表”按钮时,它会显示正确的键数,但是当您转到另一个选项卡时,它会显示为0.
我还没有发布字典,也没有发布它的对象或键。我无法弄清楚造成这种情况的原因。有什么想法吗?
答案 0 :(得分:0)
一种可能的解释是视图由于内存不足警告而被卸载,然后在下次转到其选项卡时重新加载。 -viewDidLoad
将再次被调用,根据您的实施情况,这可能会导致您丢失所有视图的状态。
答案 1 :(得分:0)
在dealloc方法中放置一个断点,此字典将被释放。事实上,在这本词典发布的地方放置一个断点。只需搜索distanceDic和release或“self.distanceDic = nil”或[self setDistanceDic:nil]语句。然后运行你的程序,看看什么断点被击中。那你就得到了答案。我怀疑你已经将它定义为@property(非原子,保留),并且当你点击标签栏并转到一个新的控制器时,它会被扔掉,或者它被加载到一个新的控制器中,并且你'重看一个已发布的。