Вход в dictionary(fromTXTRecord:)
поступает из сети, потенциально из-за пределов приложения или даже из устройства. Тем не менее, в Apple docs говорят:Словарь NSNetServiceFromTXTRecord не подтверждает утверждение о недопустимом вводе
... Сбой утверждения, если txtData не может быть представлен как объект NSDictionary.
Отсутствие утверждения оставляет программиста (меня) без возможности обработки ошибки, которая кажется нелогичной для метода, который обрабатывает внешние данные.
Если я запускаю это в терминале на Mac:
dns-sd -R 'My Service Name' _myservice._tcp local 4567 asdf asdf
мое приложение, работает в iPhone, аварии.
dictionary(fromTXTRecord:)
ожидает, что данные записи TXT (asdf asdf
) будут в форме key=val
. Если, как и выше, слово не содержит никакого =
, метод не сможет его проанализировать и не выполнить утверждение.
Я не вижу решения этой проблемы, кроме того, что вообще не использую этот метод и не реализую свой собственный синтаксический анализ, который кажется неправильным.
Я что-то упустил?
Хороший звонок. Я не думал про попытку с Objective-C. Но, чтобы повторить мой вопрос, разве это не ошибка на стороне Apple? – ateijelo
Поведение делает Swift-версию этого вызова бесполезной, поэтому кажется, что это ошибка. С другой стороны, неясно, как Apple это исправит. NSNull нельзя переносить в словарь Swift типа [String: Data]. Он не может быть превращен в ноль, потому что это эквивалентно удалению ключа. Он не может быть сопоставлен с пустым объектом Data без потери различия между «привет» и «привет»; в Objective-C первое возвращает значение NSNull, а последнее возвращает значение пустого объекта NSData. Так что Apple просто подняла руки на этом. –