Я управляю временным списком в своем приложении, чтобы избежать проблемы EXC_BAD_ACCESS (SIGSEGV)
с контурным представлением версий ОС ниже 10.12. Я объяснил, почему мне нужно сделать это в другом вопросе . Поэтому, когда мне нужно удалить элементы из временного списка, я делаю это с помощью приведенного ниже кода.
func freeupUnUsedListItems() {
concurrentListQueue.async(flags: .barrier) { [weak self] in
DispatchQueue.main.async {
self?.tempItems.removeAll { (item) -> Bool in
return self?.outlineView.row(forItem: item) == -1
}
}
}
}
Теперь проблема в том, что я получил EXC_BAD_INSTRUCTION (SIGILL)
cra sh с кодом выше. Я думаю, что использование главной очереди в моей частной очереди приводит к этой проблеме. Но я не знаю, как получить доступ к представлению структуры кроме основной очереди. Есть ли другой способ сделать это? Я хочу удалить элементы только тогда, когда строка для элемента возвращает -1 (что означает, что элемент больше не используется NSOutlineView). Работаю над этим вопросом больше недели. Любые предложения действительно помогут мне.
Crash log for reference:
Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0 com.test.app 0x0000000109c2374b closure #1 in closure #1 in ListViewController.freeupUnUsedListItems() (in App) (<compiler-generated>:0)
1 com.test.app 0x0000000109c34dbc partial apply for closure #1 in closure #1 in ListViewController.freeupUnUsedListItems() (in App) (<compiler-generated>:0)
2 com.test.app 0x0000000109c01090 thunk for @escaping @callee_guaranteed () -> () (in App) (<compiler-generated>:0)
3 libdispatch.dylib 0x00007fff85332700 _dispatch_call_block_and_release + 12
4 libdispatch.dylib 0x00007fff8532ee73 _dispatch_client_callout + 8
5 libdispatch.dylib 0x00007fff8533f767 _dispatch_main_queue_callback_4CF + 861
6 com.apple.CoreFoundation 0x00007fff85a51319 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 9
7 com.apple.CoreFoundation 0x00007fff85a0c4af __CFRunLoopRun + 2159
8 com.apple.CoreFoundation 0x00007fff85a0b9f8 CFRunLoopRunSpecific + 296
9 com.apple.HIToolbox 0x00007fff8d78f56f RunCurrentEventLoopInMode + 235
10 com.apple.HIToolbox 0x00007fff8d78f2ea ReceiveNextEventCommon + 431
11 com.apple.HIToolbox 0x00007fff8d78f12b _BlockUntilNextEventMatchingListInModeWithFilter + 71
12 com.apple.AppKit 0x00007fff8ee258ab _DPSNextEvent + 978
13 com.apple.AppKit 0x00007fff8ee24e58 -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 346
14 com.apple.AppKit 0x00007fff8ee1aaf3 -[NSApplication run] + 594
15 com.apple.AppKit 0x00007fff8ed97244 NSApplicationMain + 1832
16 com.prosoftnet.remotepcSuite 0x0000000109afd3d9 main (in App) (AppDelegate.swift:12)
17 libdyld.dylib 0x00007fff893845c9 start + 1