Skip to content

Commit e0aea2b

Browse files
committed
Фильтруем ошибку CancellationError
Похоже, есть баг в SUI, из-за которого лишний раз вызываются запросы внутри модификатора task при исчезновении вьюхи в определенной ситуации, нужно разбираться дальше
1 parent 774bfb6 commit e0aea2b

20 files changed

+47
-39
lines changed

SwiftUI-WorkoutApp/Libraries/SWUtils/Sources/SWUtils/SWAlert.swift

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,14 @@ public final class SWAlert {
3434
topMostViewController.present(alert, animated: true)
3535
}
3636

37+
/// Показывает стандартный алерт с сообщение об ошибке
38+
///
39+
/// Игнорирует `CancellationError`
40+
public func presentDefaultUIKit(_ error: Error) {
41+
guard (error as NSError).code != -999 else { return }
42+
presentDefaultUIKit(message: error.localizedDescription)
43+
}
44+
3745
private func dismiss() {
3846
currentAlert?.dismiss(animated: true)
3947
currentAlert = nil

SwiftUI-WorkoutApp/Screens/Common/ImagePicker/ModernPickedImagesGrid.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ struct ModernPickedImagesGrid: View {
6666
let newImages = try await loadImages(from: selectedItems)
6767
images.append(contentsOf: newImages)
6868
} catch {
69-
SWAlert.shared.presentDefaultUIKit(message: error.localizedDescription)
69+
SWAlert.shared.presentDefaultUIKit(error)
7070
}
7171
selectedItems.removeAll()
7272
isLoading.toggle()

SwiftUI-WorkoutApp/Screens/Common/TextEntryScreen.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ private extension TextEntryScreen {
124124
}
125125
if isSuccess { refreshClbk() }
126126
} catch {
127-
SWAlert.shared.presentDefaultUIKit(message: error.localizedDescription)
127+
SWAlert.shared.presentDefaultUIKit(error)
128128
}
129129
isLoading = false
130130
}

SwiftUI-WorkoutApp/Screens/Common/UsersListScreen.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ private extension UsersListScreen {
158158
let isSuccess = try await client.sendMessage(messagingModel.message, to: userID)
159159
endMessaging(isSuccess: isSuccess)
160160
} catch {
161-
SWAlert.shared.presentDefaultUIKit(message: error.localizedDescription)
161+
SWAlert.shared.presentDefaultUIKit(error)
162162
}
163163
messagingModel.isLoading = false
164164
}
@@ -195,7 +195,7 @@ private extension UsersListScreen {
195195
}
196196
}
197197
} catch {
198-
SWAlert.shared.presentDefaultUIKit(message: error.localizedDescription)
198+
SWAlert.shared.presentDefaultUIKit(error)
199199
}
200200
isLoading = false
201201
}
@@ -210,7 +210,7 @@ private extension UsersListScreen {
210210
try await makeListForMainUser(defaults.mainUserInfo?.id)
211211
}
212212
} catch {
213-
SWAlert.shared.presentDefaultUIKit(message: error.localizedDescription)
213+
SWAlert.shared.presentDefaultUIKit(error)
214214
}
215215
isLoading = false
216216
}

SwiftUI-WorkoutApp/Screens/Events/EventDetailsScreen.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ private extension EventDetailsScreen {
117117
onDeletion(event.id)
118118
}
119119
} catch {
120-
SWAlert.shared.presentDefaultUIKit(message: error.localizedDescription)
120+
SWAlert.shared.presentDefaultUIKit(error)
121121
}
122122
isLoading = false
123123
}
@@ -228,7 +228,7 @@ private extension EventDetailsScreen {
228228
event.trainHere = oldValue
229229
}
230230
} catch {
231-
SWAlert.shared.presentDefaultUIKit(message: error.localizedDescription)
231+
SWAlert.shared.presentDefaultUIKit(error)
232232
event.trainHere = oldValue
233233
}
234234
isLoading = false
@@ -343,7 +343,7 @@ private extension EventDetailsScreen {
343343
do {
344344
event = try await SWClient(with: defaults).getEvent(by: event.id)
345345
} catch {
346-
SWAlert.shared.presentDefaultUIKit(message: error.localizedDescription)
346+
SWAlert.shared.presentDefaultUIKit(error)
347347
}
348348
isLoading = false
349349
}
@@ -356,7 +356,7 @@ private extension EventDetailsScreen {
356356
event.comments.removeAll(where: { $0.id == id })
357357
}
358358
} catch {
359-
SWAlert.shared.presentDefaultUIKit(message: error.localizedDescription)
359+
SWAlert.shared.presentDefaultUIKit(error)
360360
}
361361
isLoading = false
362362
}
@@ -372,7 +372,7 @@ private extension EventDetailsScreen {
372372
event.photos = event.removePhotoById(id)
373373
}
374374
} catch {
375-
SWAlert.shared.presentDefaultUIKit(message: error.localizedDescription)
375+
SWAlert.shared.presentDefaultUIKit(error)
376376
}
377377
isLoading = false
378378
}

SwiftUI-WorkoutApp/Screens/Events/EventFormScreen.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ private extension EventFormScreen {
189189
dismiss()
190190
}
191191
} catch {
192-
SWAlert.shared.presentDefaultUIKit(message: error.localizedDescription)
192+
SWAlert.shared.presentDefaultUIKit(error)
193193
}
194194
isLoading = false
195195
}

SwiftUI-WorkoutApp/Screens/Events/EventsListScreen.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ private extension EventsListScreen {
188188
if selectedEventType == .past {
189189
pastEventStorage.loadIfNeeded(&pastEvents)
190190
}
191-
SWAlert.shared.presentDefaultUIKit(message: error.localizedDescription)
191+
SWAlert.shared.presentDefaultUIKit(error)
192192
}
193193
isLoading = false
194194
}

SwiftUI-WorkoutApp/Screens/Messages/DialogScreen.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ private extension DialogScreen {
162162
markedAsReadClbk(dialog)
163163
}
164164
} catch {
165-
SWAlert.shared.presentDefaultUIKit(message: error.localizedDescription)
165+
SWAlert.shared.presentDefaultUIKit(error)
166166
}
167167
}
168168

@@ -172,7 +172,7 @@ private extension DialogScreen {
172172
do {
173173
messages = try await SWClient(with: defaults).getMessages(for: dialog.id).reversed()
174174
} catch {
175-
SWAlert.shared.presentDefaultUIKit(message: error.localizedDescription)
175+
SWAlert.shared.presentDefaultUIKit(error)
176176
}
177177
isLoading = false
178178
}
@@ -188,7 +188,7 @@ private extension DialogScreen {
188188
await askForMessages(refresh: true)
189189
}
190190
} catch {
191-
SWAlert.shared.presentDefaultUIKit(message: error.localizedDescription)
191+
SWAlert.shared.presentDefaultUIKit(error)
192192
}
193193
isLoading = false
194194
}

SwiftUI-WorkoutApp/Screens/Messages/DialogsListScreen.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ private extension DialogsListScreen {
164164
do {
165165
try await viewModel.askForDialogs(refresh: refresh, defaults: defaults)
166166
} catch {
167-
SWAlert.shared.presentDefaultUIKit(message: error.localizedDescription)
167+
SWAlert.shared.presentDefaultUIKit(error)
168168
}
169169
}
170170

@@ -178,7 +178,7 @@ private extension DialogsListScreen {
178178
do {
179179
try await viewModel.deleteDialog(at: index, defaults: defaults)
180180
} catch {
181-
SWAlert.shared.presentDefaultUIKit(message: error.localizedDescription)
181+
SWAlert.shared.presentDefaultUIKit(error)
182182
}
183183
}
184184
}

SwiftUI-WorkoutApp/Screens/Parks/Map/ParksMapScreen.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ private extension ParksMapScreen {
190190
do {
191191
try parksManager.makeDefaultList()
192192
} catch {
193-
SWAlert.shared.presentDefaultUIKit(message: error.localizedDescription)
193+
SWAlert.shared.presentDefaultUIKit(error)
194194
}
195195
// Если прошло больше одного дня с момента предыдущего обновления, делаем обновление
196196
if parksManager.needUpdateDefaultList {
@@ -206,7 +206,7 @@ private extension ParksMapScreen {
206206
do {
207207
try parksManager.deletePark(with: id)
208208
} catch {
209-
SWAlert.shared.presentDefaultUIKit(message: error.localizedDescription)
209+
SWAlert.shared.presentDefaultUIKit(error)
210210
}
211211
}
212212

@@ -224,7 +224,7 @@ private extension ParksMapScreen {
224224
let updatedParks = try await SWClient(with: defaults).getUpdatedParks(from: dateString)
225225
try parksManager.updateDefaultList(with: updatedParks)
226226
} catch {
227-
SWAlert.shared.presentDefaultUIKit(message: error.localizedDescription)
227+
SWAlert.shared.presentDefaultUIKit(error)
228228
}
229229
isLoading = false
230230
}

0 commit comments

Comments
 (0)