Но я все еще получаю отчеты о зависании пользовательского интерфейса. Вот мой код и основной стек потоков.
Код: Выделить всё
func fetchedResultController(sectionNameKeyPath: String? = nil,
cacheName: String? = nil,
fetchList: Bool = true) async -> NSFetchedResultsController {
if self.request.sortDescriptors == nil {
self.request.sortDescriptors = []
}
if !fetchList {
self.request.fetchLimit = 1
}
let fetchedResultController = NSFetchedResultsController(fetchRequest: self.request,
managedObjectContext: self.context,
sectionNameKeyPath: sectionNameKeyPath,
cacheName: cacheName)
await self.context.perform {
do {
try fetchedResultController.performFetch()
} catch let error {
// ...
}
}
return fetchedResultController
}
Код: Выделить всё
Thread 0 - com.apple.main-thread - (TH_STATE_WAITING)
0 libsystem_kernel.dylib +0x1560 _kevent_id
1 libdispatch.dylib +0x267d0 __dispatch_kq_poll
2 libdispatch.dylib +0x271b8 __dispatch_event_loop_wait_for_ownership
3 libdispatch.dylib +0x13590 ___DISPATCH_WAIT_FOR_QUEUE__
4 libdispatch.dylib +0x13158 __dispatch_sync_f_slow
5 CoreData +0x9d120 -[NSManagedObjectContext performBlockAndWait:]
6 CoreData +0x9c5fc -[NSFetchedResultsController _recursivePerformBlockAndWait:withContext:]
7 CoreData +0x270d8 _developerSubmittedBlockToNSManagedObjectContextPerform
8 CoreData +0x9d0e8 -[NSManagedObjectContext performBlockAndWait:]
9 CoreData +0x9c5fc -[NSFetchedResultsController _recursivePerformBlockAndWait:withContext:]
10 CoreData +0x9c208 -[NSFetchedResultsController performFetch:]
11 MailLib +0x3a094 specialized closure #1 in Fetcher.fetchedResultController(sectionNameKeyPath:cacheName:fetchList:)
12 MailLib +0x3e2d8 partial apply for specialized closure #1 in Fetcher.fetchedResultController(sectionNameKeyPath:cacheName:fetchList:) ()
13 CoreData +0xd0320 closure #1 in closure #1 in NSManagedObjectContext._rethrowsHelper_perform_enqueued(_:rescue:)
14 CoreData +0xd0180 thunk for @escaping @callee_guaranteed () -> ()
15 CoreData +0x270d8 _developerSubmittedBlockToNSManagedObjectContextPerform
16 libdispatch.dylib +0x3dd0 __dispatch_client_callout
17 libdispatch.dylib +0x125a0 __dispatch_main_queue_drain
18 libdispatch.dylib +0x121b4 __dispatch_main_queue_callback_4CF
19 CoreFoundation +0x5670c ___CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__
20 CoreFoundation +0x53910 ___CFRunLoopRun
21 CoreFoundation +0x52cd4 _CFRunLoopRunSpecific
22 GraphicsServices +0x11a4 _GSEventRunModal
23 UIKitCore +0x40a908
24 UIKitCore +0x4be9cc UIApplicationMain
25 Works +0xee7b18 main (AppDelegate.swift:13:7)
26 dyld +0x3ce48 start
Код: Выделить всё
viewContextНужно ли использовать асинхронное выполнение только для контекста bg?
А использование контекста bg для NSFetchedResultsController может быть решением?
Однако мы используем его для пользовательского интерфейса.
Подробнее здесь: https://stackoverflow.com/questions/787 ... thod-usage
Мобильная версия