SQLite.swift: приложение вылетает из-за принудительного развертывания значения nil, когда в активном поиске происходит прикосновение к UITableViewCell - PullRequest
0 голосов
/ 12 мая 2018

Я добавил UISearchBar к своему ViewController, и в нем тоже есть UITableView, который " питается" данными из базы данных SQLite с использованием SQLite.Swift .

Поиск работает, все результаты отображаются корректно при поиске.Вызов DetailView, нажав TableViewCell, также работает нормально, но когда я щелкаю по ячейке во время активного поиска, приложение вылетает.

Странная вещь: все работает нормально в симуляторе безсбой, но не на моем физическом устройстве.Я использую последние бета-версии XCode 9 и XCode 9 и запускаю приложение в iOS 11.3 или 11.4.

Я пробовал несколько вещей, но я просто не могу понять, что вызывает сбой,Я вставляю все ViewController.Я отметил разделы, где используется код, который взят из добавленных фреймворков / расширений.

Ошибка говорит:

"Поток 1:Неустранимая ошибка: неожиданно обнаружен ноль при развертывании необязательного значения. "

Это раздел, где ошибка относится к SQLite.swift:

func value<A: Value>(_ v: Binding?) -> A {
    return value(v!)
}

I 'Мне интересно, где это значение nil.

Вот мой код: спасибо за подсказки и помощь

РЕДАКТИРОВАТЬ: Я редактировалкод, потому что ошибка возникла не в ViewController активного окна, а в DetailViewController, который должен отображаться после нажатия TableViewCell.Это строка, где возникает ошибка:

Этот код должен найти строку в базе данных, где имя и дата соответствуют заданным переменным, чтобы выбрать имя в этой строке:

let nameOfBank = try! database.scalar(table.filter(tableColumnName == cell?.textLabel?.text && tableColumnDate == cell?.detailTextLabel?.text).select(bankName))

1 Ответ

0 голосов
/ 13 мая 2018

Я отвечаю на свой вопрос после того, как я нашел источник ошибки.

Ошибка не возникла в ViewController внутри моего вопроса. Это произошло в viewDidLoad() в DetailViewController, где я получил недостающие данные для отображения в деталях из базы данных SQLite.

Вот решение после исследования и проверки GitHub SQLite.swift:

Чтобы получить значение столбца для строки, в которой вы уже знаете два других значения, вам нужно select a binding из двойного filter. И это выглядит так:

let wantedValue = try! database.scalar(history.select(valueLookingFor).filter(knownValue1 == firstKnownValue && knownValue2 == secondKnownValue))

Нет ошибок, больше нет сбоев.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...