我有一個負責加載有關事件的詳細信息(查詢sqlite數據庫的標題,描述,縮略圖路徑等)的方法,因爲我需要調用這個大量的我正在使用Grand Central Dispatch調度到後臺線程。iOS在後臺線程上訪問UIScreen
問題是我得到一個UIKit線程異常(讓我知道我在除主線程以外的線程上運行UI方法,導致應用程序崩潰)。我不會改變的UI在所有所以這是幾乎不可能找到,但我最後把範圍縮小到一行代碼:
bool retina = (UIScreen.MainScreen.Scale > 1.0);
我使用UIScreen以確定設備是否有視網膜屏幕(以確定縮略圖圖像路徑是否應該在末尾附加「@ 2x」),並且只是訪問它(看起來是一個靜態變量)會引發該UIKit異常。
是否有解決方法來確定屏幕是否不使用UIKit(或後臺線程安全)的視網膜,還是有更好的方法來解決這個問題?
注意:我使用Xamarin(C#)來創建應用程序,但在swift中的任何答案都非常好,並且易於轉換。
難道你只是在啓動時(即主線程)設置一次變量,然後使用它? –
我想到了,但是這個方法在很多不同的地方被調用,所以需要大量的重構。除非我設置了一個確定啓動時間的單身人士,但如果屏幕是視網膜,會不會過度呢?或者這是一個好主意? –
回覆:「不同的地方」你有一個特定的對象類型來管理數據加載嗎?它是否在主線程上初始化? (否則,我不知道Xamarin體系結構,但是在「Xcode」應用程序中,我很想讓它成爲應用程序委託的屬性 - 對於單個變量來說不完美但合理。) –