
I'm expecting the user to be able to comfortably edit the list without interruption caused by the list exiting out of edit mode arbitrarily.
I've tried to share fetched results from BookList superview to GenreManager subview as seen here, but that does not solve the issue. What does solve the issue is removing this code from moveGenres function.
for reverseIndex in stride(from: revisedItems.count - 1, through: 0, by: -1) {
revisedItems[reverseIndex].index = Int64(reverseIndex)
}
但隨后用戶無法再編輯串列順序。我猜可以將串列的重新索引推遲到用戶退出編輯模式的位置。但我無法按照此處的建議成功觀察 onChange 中的編輯模式更改。我考慮構建一個自定義編輯按鈕作為最后的手段,因為它已經作為 Apple 的本地解決方案提供。
這個問題的根本原因是什么?解決這個問題的最佳方法是什么?
uj5u.com熱心網友回復:
我注意到,如果您稍微向下拖動作業表,移動一行后,表格單元格會重新進入編輯模式以匹配編輯按鈕。如果您再次將作業表向下拖動單元格,則退出編輯模式!這讓我覺得List在作業表內時存在錯誤,我將其報告為FB9969447。我相信在您的測驗專案中也會發生這種情況的原因是因為GenreManager()在移動完成時是 init,原因如下所述。作為一種解決方法,您可以使用fullScreenCoveruntil sheetis fixed。editModethatEditButton和use 是環境的List一部分,并且作業表對于環境變數的行為總是有點奇怪,因此這可能是該錯誤的原因。您還可以嘗試重新構建您的 View 結構,以便GenreManager()更改時不是 init ,genres但這可能是徒勞的,因為在拖動作業表時也會發生錯誤。
SwiftUI 具有依賴跟蹤功能,因此如果您不呼叫它,則在更改ForEach(genres)時不再運行正文。genres所以問題不在于Picker它本身,而在于BookList當移動時 body 被呼叫,導致genres. 在 body use 的頂部,let _ = Self._printChanges()您將看到除錯輸出,告訴您運行 body 的原因。僅供參考,目前存在一個錯誤,其中具有@FetchRequest(即使具有相同引數)的 View init 始終呼叫主體,因為@self changed- 這是因為該結構初始化一個新物件而不是使用@StateObject,因此 SwiftUI 始終認為 View 已更改FB9956812。
所以我認為正在發生的事情是當流派串列被移動改變時,BookList呼叫 body (因為在 Picker 中使用流派)并且它初始化為GenreManager.
這是一個 SwiftUI 提示,最好重構您的視圖,這樣您就不會啟動太多不使用 SwiftUI 在檢測到更改時呼叫 body 的資料的事物層。即在您的 BookList 中,當流派發生變化并呼叫正文時,您創建一個NavigationView, .toolbar, ToolBarItem,Menu直到Picker您實際使用流派。制作一個創建流派并立即在正文中使用它的結構會更有效。例如,您可以創建一個首先執行and 呼叫的GenrePicker結構,如果您在外部需要它,則將系結傳遞給選擇。FetchRequestPicker
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/452657.html
