UIReferenceLibraryViewController hasDictionaryDefinition 仅适用于 iPhone 5s 上的模拟器

2024-01-12

当我调用这段代码时:

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

...在 iPhone 5s 或更高版本上,我将正确的值输入“response”(一个布尔值,具体取决于变量“word”是否在本地字典中定义。在模拟器上执行大约需要 500 毫秒。

然而,当我在 iPhone 4s、5、6 或 6+ 模拟器(但不是 5s)上调用它时,它立即返回 false 并将以下内容写入日志:

 +[_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+ 设备来测试这个。

到底是怎么回事?


我想我最终找到了答案,那就是控制台中的消息试图说用户没有安装字典。

事实是

[UIReferenceLibraryViewController dictionaryHasDefinitionForTerm:word];

如果出现以下情况,则返回 false:

  • 该词未定义
  • 没有安装词典

这实际上是非常无益的。在我的特定纯英语应用程序用例中,我处理所有这些问题的策略是:

  1. 如果 [UIReferenceLibraryViewController DictionaryHasDefinitionForTerm:word] 返回 true,则调用当前的“定义函数”并返回。

  2. 但是,如果它返回 false,则使用应在所有英语词典中定义的单词(例如“the”或“word”)调用dictionaryHasDefinitionForTerm。

  3. 如果“the”或“word”返回true,则已安装词典,但该单词在已安装的词典中未定义。缓存“the”/“word”的结果,这样你就不必重复步骤2,但不要永久保存它,因为用户或系统可能会删除字典 - 整个字典系统似乎有很多错误。

  4. 如果“the”或“word”返回 false,我们可以认为这意味着没有安装词典。此时,我调用该函数来呈现原始单词的定义(自然显示为“无定义”,但这是用户访问“管理”词典功能以安装词典的唯一方法!) ,以及一个对话框,解释用户如果需要单词定义,则需要单击“管理”并安装英语词典。

距离理想还有很长的路要走,但不确定在我的用例中我还能做什么。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UIReferenceLibraryViewController hasDictionaryDefinition 仅适用于 iPhone 5s 上的模拟器 的相关文章

随机推荐