Синтаксический анализ XML в фоновом режиме

-3

Я программирую приложение iOS в Swift 3, и я разбираю очень большой XML файл (103558 строк) и извлекаю всю необходимую информацию из него с помощью встроенного XMLParser Swift (обычно называемого NSXMLParser) без каких-либо проблем.

Основная проблема заключается в том, что с моим приложением мне нужна вся эта информация, как только мое приложение загружается, поэтому пользовательский интерфейс блокируется на 12 секунд для завершения синтаксического анализа (разбор начинается, как только загружается первая страница пользовательского интерфейса).

Изучив много онлайн и документацию Apple, я не смог найти много другого, кроме некоторого кода Objective-C, который я не мог понять, как использовать с Swift 3. Мой главный вопрос: есть ли способ использовать XMLParser или какой-либо другой парсер в фоновом потоке или асинхронно?

Заранее спасибо.

капуста

Теги:
parsing

1 ответ

2
Лучший ответ

Единственной операцией, которую вы не можете выполнять в фоновом потоке, является операция пользовательского интерфейса.

NSXMLParser анализирует данные синхронно по потоку, который его вызывает

Поэтому, если вы вызываете NSXMLParser в фоновом потоке, все разбор произойдет в фоновом потоке.

let backgroundQueue = DispatchQueue(label: "com.app.queue",
                                            qos: .background,
                                            target: nil)
        backgroundQueue.async {
            //call to 'parse' function of XMLParser
            DispatchQueue.main.async {
                //pass parsing result to UI on main thread
            }
        }

Пока xml анализируется в фоновом потоке, вы можете продолжать показывать индикатор активности (в основном потоке) пользователю. Таким образом, ваш пользовательский интерфейс не будет заблокирован, пока ваш XML обрабатывается.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню