|
|
1
1
第一个想法是,在推送加载视图之前,您可能不想将startUpdatingLocation发送到CLLocationManager。通常,第一条-locationManager:didUpdateToLocation:fromLocation:消息会与缓存的GPS数据一起立即出现。只有当您处理每条消息,而不是如示例代码所示过滤GPS数据时,这才重要。但是,这不会导致您描述的情况-它会导致加载屏幕卡住。 在另一种情况下,我也经历过类似的奇怪行为,在切换到其他选项卡时,我试图弹出根视图控制器,但调用没有在正确的位置进行。我相信popToRootViewController为我打了两次电话。我怀疑你的加载视图不是被推了两次就是被弹出了两次。 我建议在加载ViewController时只需最少的日志记录即可实现-viewWillAppease:、-viewDidAppease:、-viewWillEveal:和-viewDidEveal:。
另一种想法是,尽管@synchronized块是个好主意,但它只会阻止其他线程执行这些语句,直到第一个线程退出该块。我建议将-stopUpdatengLocation消息移动到@synchronized块中的第一条语句。这样,一旦您决定对一些新的GPS数据采取行动,您会立即通知CLLocationManager停止发送新数据。 |
|
2
0
在调用updateCells时,是否可以尝试调试应用程序以查看控件的位置?应用程序似乎没有任何明显的问题。 确保在LoadingViewController类中没有内存警告。如果出现内存警告,并且正在释放RootViewController的视图,则在弹出RootViewController时,将再次调用viewDidLoad。 在viewDidLoad和updateCells中保留断点。您确定没有在其他任何地方调用LoadingViewController吗? |
|
|
3
0
所以,我从来没有让它起作用。我只在每次以编程方式调用popViewController时才在设备上观察到这种行为,而不是允许导航控制器上的默认后退按钮进行弹出操作。 我的解决方法是构建一个自定义加载视图,每次由于访问互联网而出现延迟时,都将屏幕翻转到该视图。我的方法使用一个布尔变量yes或no-yes切换到加载屏幕,no切换回正常视图。代码如下:
} |
|
|
4
0
查看您的原始代码,我非常怀疑这一块:
上面的代码让我烦恼的是,你几乎肯定在泄漏
|
|
|
5
0
我是在搜索完全相同的问题时遇到这个问题的,所以虽然我确信你现在已经解决了你的问题,但我想我会发布我的解决方案,以防其他人遇到它。。。 在interface builder中将两个iAction指定给同一个UIButton时,可能会导致此错误。结果是,我用来将视图控制器推到堆栈上的按钮被分配给了两个iAction,每个iAction都在将不同的控制器推到navigationController的堆栈上(尽管您最终只能看到其中一个,可能是最后一个被调用的)。因此,不管怎样,按下最上面视图上的后退按钮并不会真正关闭它(或者可能会关闭第二个未显示的控制器),您必须按下两次才能返回。 无论如何,请检查您的按钮,并确保它们仅分配给单个iAction。那帮我修好了。 |
|
|
user2606782 · 限制子视图在superview边界内的移动 8 年前 |