有效的是,应用程序会在重要位置更改时启动。在AppDelegate
中,我检查UIApplicationLaunchOptionsLocationKey
并初始化位置管理员:
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters
locationManager.distanceFilter = 50
locationManager.allowsBackgroundLocationUpdates = true
locationManager.startMonitoringSignificantLocationChanges()
初始视图控制器是UITabBarController
,显示UICollectionViewController
。
当我设置UICollectionView中没有单元格时,一切正常,didUpdateLocations
的{{1}}被调用。
但是,当locationManager
' UICollectionView
返回1时,numberOfItemsInSection
不会被调用。相反,在应用程序崩溃之前,didUpdateLocations
的CPU占用率为99%。
我从单元格中删除了所有控件和所有代码,所以现在它是一个空单元格,但仍然会发生这种情况。
在Time Profiler中,我发现这与UICollectionView
有关。
这里有什么问题?
更新1: UICollectionViewData setLayoutAttributes
下有一个堆栈。
更新2:该应用正常运行,并且在用户正常启动时从未崩溃。
答案 0 :(得分:0)
您比本网站上的任何人都更了解代码,但这看起来很可疑:
你在Observers上运行某种循环,无论那是什么。 看起来每个人都在做一个回调,那就是做某种需要提交的事务,并且作为提交的一部分,它正在显示一些内容,并且作为其中的一部分,它正在做一堆布局,子视图等。 那时间基本上都在消耗所有。
您可能需要关闭显示更新,直到完成为止。
答案 1 :(得分:0)
有趣的是,解决方案是禁用重要的位置更改并运行应用程序:
locationManager.allowsBackgroundLocationUpdates = false
locationManager.stopMonitoringSignificantLocationChanges()
重新启用它并运行应用程序后,它运行良好:
locationManager.allowsBackgroundLocationUpdates = true
locationManager.startMonitoringSignificantLocationChanges()
我尝试了一切,从删除第三方框架到删除应用程序到最少的代码,是的,我也做了100次清理构建文件夹。
iOS应用程序注册表可能出现问题,通知重要的位置更改。希望这可以节省一些人花费时间来解决这个问题。