2014-10-08 2 views
3

Когда я называю этот код:UIReferenceLibraryViewController hasDictionaryDefinition работает только в симуляторе на iPhone 5s

NSString* word = @"hello"; 
bool response = [UIReferenceLibraryViewController dictionaryHasDefinitionForTerm:word]; 

... исходя из iPhone 5s или выше, я получить правильное значение в «ответ» (логическое значение в зависимости от того, переменная «слово» определяется в локальном словаре или нет. Требуется около 500 мс для выполнения на симуляторе.

Однако, когда я называю это на симуляторе iPhone 4, 5, 6 или 6+ (но не на 5s), то он немедленно возвращается как ложный и записывает следующее в журнал:

+[_UIDictionaryManager _availableDefinitionDictionaries] returned nil. 
Error: Error Domain=ASError Code=21 "The operation couldn’t be completed. 
(ASError error 21 - Unable to copy asset information)" 

Функциональность словаря должна работать на iOS 5+. У меня нет устройств iPhone 4s/5/6/6 +, чтобы проверить это.

Что происходит?

+0

Просто для удовольствия вы пытались сделать чистую/перестроенную? – KirkSpaziani

+0

У меня сейчас, но не исправлено. Странный. –

+0

32/64биты, может быть! – BoilingLime

ответ

2

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

Тот факт, что

[UIReferenceLibraryViewController dictionaryHasDefinitionForTerm:word]; 

возвращает ложь, если:

  • Слово не определено
  • Там нет словарей не установлен

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

  1. Если [UIReferenceLibraryViewController dictionaryHasDefinitionForTerm: слово] возвращает истину, а затем вызвать настоящую функцию «определение» и возвращение.

  2. Однако, если он возвращает false, то вызывает словарьHasDefinitionForTerm со словом, которое должно быть определено во всех английских словарях, таких как «или» или «слово».

  3. Если «the» или «word» return true, тогда есть словари, но это слово не определено в установленных словарях. Загрузите результат слова «/», чтобы не повторять шаг 2, но не сохраняйте его навсегда, потому что пользователь или система могут удалить словарь - вся система словарей кажется очень глючной.

  4. Если «the» или «word» возвращает false, мы можем принять это, чтобы не было установлено никаких словарей. В этот момент я вызываю функцию, чтобы представить определение исходного слова (которое показано с «без определения», естественно, но это единственный способ для пользователя получить доступ к функции «управлять» словарями, чтобы установить словарь!) , вместе с диалоговым окном, объясняющим, что пользователю нужно щелкнуть «управлять» и установить словарь на английском языке, если им нужны определения слов.

Длинный путь от идеала, но не уверен, что еще я могу сделать в своем прецеденте.

1

Не уверен, что если это действительно отвечает на вопрос, но вот то, что вы, возможно, будет интересно узнать о:

  1. Если вы откроете UIReferenceLibraryViewController (даже за пределами приложения, например, из Safari) и крана Управление там показать список словарей (даже не загружая ничего), ошибка исчезает для текущего симулятора.
  2. Сброс содержимого и настроек на симуляторе возвращает ошибку - пока вы снова не №1.
  3. Странно, на устройстве я постоянно получаю YES в dictionaryHasDefinitionForTerm:, даже если я тогда вижу «Определение неопределенности» в контроллере.

Некоторые из них, безусловно, должны быть ошибка :-)
Мне очень интересно знать, если кто имеет такое же поведение в # 3, как это пахнет хуже, чем мусорить в журналах.

Смежные вопросы