Отказ
Я не могу рассказать вам, как это работает - тот факт, что NSDataDetector
наследует NSRegularExpression
, может предложить , что он использует набор регулярных выражений, но я искренне сомневаюсь, что (например, детектор для даты -types использует информацию, которая разбросана по более длинным блокам текста, поэтому представляется более вероятным, что под капотом происходит некоторая кластеризация и обработка естественного языка).
Основная причина, почему он лучше работает с американскими адресами, я полагаю, так же проста, как и скучна:
Apple - американская компания и (за исключением британца Джонатана Айва) каждый из ее топ-менеджеров является североамериканцем. Поэтому неудивительно, что их подход «сначала США / Северная Америка» [1].
Это причина, по которой конструкция силового блока настолько элегантна при использовании компактного разъема US (где складываются зубцы) - и выглядит так неуклюже, как почти любой другой ...
Другая причина в том, что Apple - как и все остальные - отправляет как можно скорее:
Если у них есть что-то, что работает для их клиентов в США, но не для остальных, почему бы не отправить его за им и добавить поддержку других языков через обновления программного обеспечения позже?
Что касается вашей проблемы, то, что может или может не помочь (читай: «Я не беспокоил тестирование») с обнаружением адресов, это то, что пользователь установил язык их устройства соответственно.
Если - и только если - вы обнаружите, что это положительно влияет на ваши результаты, вы можете проверить, равна ли страновая часть [[NSLocale currentLocale] localeIdentifier]
IN
и (если это не так) подсказать пользователю чтобы изменить это в приложении «Настройки», в противном случае.
Если это окажется бесполезным, вы должны Roll-Your-Own ™ ...
(1) Основным заметным исключением из этого правила стал выбор технологии основной полосы для исходного iPhone, где предпочтение GSM по сравнению с CDMA могло быть недостатком локально , но ключом к успеху глобально .