0

有效的是,應用程序在重大位置更改時啓動到後臺。在AppDelegate予檢查的UIApplicationLaunchOptionsLocationKey和init位置管理器:UICollectionView的99%CPU使用率 - 重要的位置更改無法調用「didUpdateLocations」

locationManager.delegate = self 
locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters 
locationManager.distanceFilter = 50 
locationManager.allowsBackgroundLocationUpdates = true 
locationManager.startMonitoringSignificantLocationChanges() 

初始視圖控制器是UITabBarController其示出了UICollectionViewController

當我設置UICollectionView中沒有單元格時,一切正常,的didUpdateLocations被調用。

但是,當UICollectionViewnumberOfItemsInSection返回1時,didUpdateLocations不會被調用。相反,在應用程序崩潰之前,UICollectionView會有99%的CPU使用時間。

我刪除了單元格中的所有控件和所有代碼,所以它現在是一個空單元格,仍然會發生這種情況。

在時間分析器中,我發現這與UICollectionViewData setLayoutAttributes有關。

Call stack in Time Profiler

這裏有什麼錯?

更新1:setLayoutAttributes下的堆棧。

enter image description here

更新2:的應用程序工作正常,並通過用戶正常啓動時永不死機。

回答

0

滑稽的是,該解決方案是,一旦停用顯著的位置變化和運行應用程序:

locationManager.allowsBackgroundLocationUpdates = false 
locationManager.stopMonitoringSignificantLocationChanges() 

重新啓用它,並運行應用程序後,它工作得很好:

locationManager.allowsBackgroundLocationUpdates = true 
locationManager.startMonitoringSignificantLocationChanges() 

我什麼都試過,從刪除第三方框架剝離應用程序到最少的代碼,是的,我也做了100次清理生成文件夾。

也許iOS的註冊應用程序出現錯誤,通知重大的位置變化。希望這可以幫助我省下花費時間來解決這個問題。

0

你理解的代碼比任何人在這個網站,這看起來可疑:

enter image description here

您正在運行某種循環超過觀察員,不管那些。 它看起來像每一個它正在做回調,這是做某種需要提交的事務,作爲提交的一部分,它顯示的東西,作爲它的一部分,它正在做一堆佈局,子視圖等。 這基本上是全部的時間。

您可能要關閉顯示更新,直到完成。

+0

嗨邁克,感謝您的調查,我沒有給任何觀察員打電話,但我找到了解決方案,請參閱上面的答案。 – Manuel