CoreData應用UI活動指示器不顯示的解決

2021-12-29 19:50:29 字數 512 閱讀 8965

乙隻簡單的coredata應用,ui介面左上角按鈕觸發一段耗時的**,app本意是在執行耗時**時將按鈕暫時變為乙個活動指示器,等到**執行完畢再恢復原來的按鈕.但是app執行時活動指示器從未顯示過!

這是乙個典型的主線程阻塞的情況,因為新增活動指示器是乙個ui操作,所以它會被耗時操作阻塞,它會被執行,但沒有效果(或者說結果未定義,在這裡就是沒有效果):

func handle()我們下意識的做法是將耗時操作放到非main佇列中去,like this:

func handle()

}}這樣執行下來貌似沒有問題,但實際上你在私有queue執行的context沒有跨執行緒的安全性!

來看一下我們是如何建立context物件的:

lazy var context: nsmanagedobjectcontext = ()注意我們使用的選項是在main佇列上的併發!

這就是私有context的用途了,我們可以臨時建立乙個在私有佇列上執行的context來解決此問題:

func handle()}}

IOS開發UI基礎 活動指示器

1.建立複製圖層 careplicatorlayer replicator careplicatorlayer layer replicator.frame cgrectmake 50,50,200,200 replicator.backgroundcolor uicolor redcolor cg...

UI基礎 03 應用剖析

本著,介紹在建立helloworld工程中生成了很多檔案 如圖3 1 那各自作用和關係有是什莫呢?1.導航試檢視下有helloworld helloworldtests products三個組 如圖3 1 1 helloworld組放置的是helloworld工程中重要的 2 helloworldt...

Quist UI 快應用UI元件庫

github 安裝 npm install quist ui d 或 yarn add quist ui dev 配置如果是在已有專案安裝,請按如下 配置webpack var path require path module.exports 本地體驗此操作適用於在沒有專案的基礎上進行安裝 clon...