当我调用此代码时:
NSString* word = @"hello";
bool response = [UIReferenceLibraryViewController dictionaryHasDefinitionForTerm:word];
...在iPhone 5s或更高版本的iPhone上,我得到正确的值,以及#39;响应' (bool取决于变量' word'是否在本地词典中定义。在模拟器上执行大约需要500ms。
然而,当我在iPhone 4s,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 :(得分:2)
我想我最终找到了答案,即控制台中的消息试图说用户没有安装字典。
事实
[UIReferenceLibraryViewController dictionaryHasDefinitionForTerm:word];
如果符合以下情况,返回false:
这实际上真的非常无益。我在我的特定英语应用程序用例中处理所有这些的策略是:
如果[UIReferenceLibraryViewController dictionaryHasDefinitionForTerm:word]返回true,则调用当前的“定义函数”并返回。
但是,如果它返回false,则使用应在所有英语词典中定义的单词调用dictionaryHasDefinitionForTerm,例如“the”或“word”。
如果“the”或“word”返回true,则会安装词典,但在已安装的词典中未定义此词。缓存“该”/“单词”的结果,这样您就不必重复步骤2,但不要永久保存它,因为用户或系统可能会删除字典 - 整个字典系统似乎非常错误。 / p>
如果“the”或“word”返回false,我们可以认为没有安装字典。此时我调用函数来呈现原始单词的定义(自然地以“无定义”显示,但这是用户访问“管理”词典功能以便安装字典的唯一方法!) ,以及一个对话框,说明用户需要点击“管理”并安装英文字典,如果他们想要字词定义。
离理想很远,但不确定我在用例中还能做些什么。
答案 1 :(得分:1)
不确定这是否真的能回答这个问题,但这是您可能有兴趣了解的内容:
UIReferenceLibraryViewController
(即使在应用程序外部,例如来自Safari)和点按“管理”以显示字典列表(即使没有下载任何内容),当前错误也会消失模拟器。 YES
中获得dictionaryHasDefinitionForTerm:
,即使我在控制器中看到“找不到定义”。其中一些肯定是一个错误:-)
我很好奇,知道是否有人在#3中有相同的行为,因为它闻起来比在日志中乱扔垃圾更糟糕。